C++ map详解
来源:互联网 发布:telnet本机ip端口不通 编辑:程序博客网 时间:2024/06/11 09:32
1、map 对象的定义
map<k, v> m; 创建一个名为m的空map对象,其键和值得类型分别为k和vmap<k, v> m(m1); 创建m1的副本m,m与m1必须有相同的键类型和值类型map<k, v> m(b, e); 创建map类型的对象m,存储迭代器b和e标记的范围内所有元素的副本。元素的类型必须能转换为pair<const k, v>
2、map类定义的类型
map<K, V>::key_type 在map容器中,用做索引的键的类型map<K, V>::mapped_type 在map容器中,键所关联的值的类型map<K, V>::value_type 一个pair类型,它的first元素具有const map<K, V>::key_type类型,而second元素则为map<K, V>::mapped_type类型
map迭代器进行解引用将产生pair类型的对象
3、使用下标访问map对象
map<string, int> word_count; //empty map//insert default initialized element with key Anna; then assign 1 to its valueword_count["Anna"] = 1;
上述代码将发生以下事情:
- 在word_count中查找键为Anna的元素,没有找到。
- 将一个新的键-值对插入到word_count中。它的键是const string类型的对象,保存Anna.而它的值则采用值初始化,这就意味着在本例中值为0。
- 将这个新的键-值对插入到word_count中
- 读取新插入的元素,并将它的值赋为1
int main(){ map<string, int> word_count; string word; cout << word_count["Anna"]; // print 0 ++word_count["Anna"]; cout << word_count["Anna"] << endl; // print 1 return 0;}
4、map::insert的使用
- m.insert(e) e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则插入一个值为e.second的新元素;如果该键在m中已存在,则保持m不变。该函数返回一个pair类型对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素。
- m.insert(beg, end) beg和end是标记元素范围的迭代器,其中的元素必须为m.value_type类型的键-值对。对于该范围内的所有元素,如果它的键在m中不存在,则将该键及其关联的值插入到m。返回void类型
- m.insert(iter, e) e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指向m中具有给定键的元素
//if Anna not already in word_count, inserts new element with value 1word_count.insert(map<string, int>::value_type("Anna", 1));//word_count.insert(make_pair("Anna", 1));与上一行效果一样
5、查找并读取map中的元素
不修改map对象的查询操作
- m.count(k) 返回m中k的出现次数。对于mpa对象,count成员的返回值只能是0或1。map容器只允许一个键对应一个实例,所以count可有效地表明一个键是否存在。如果返回值非0,则可以使用下标操作符来获取该键所关联的值,而不必担心这样做会在map中插入新元素。
- m.find(k) 如果m容器中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器
6、从map中删除元素
- m.erase(k) 删除m中键为k的元素。返回size_type类型的值,表示删除的元素个数
- m.erase(p) 从m中删除迭代器p所指向的元素。p必须指向m中确实存在的元素,而且不能等于m.end()。返回void类型
- m.erase(b, e) 从m中删除一段范围内的元素,该范围由迭代器对b和e标记。b和e必须标记m中的一段有效范围:即b和e都必须指向m中的元素或最后一个元素的下一个位置。而且,b和e要么相等(此时删除的范围为空),要么b所指向的元素必须出现在e所指向的元素之前。返回void类型
7、map 对象的迭代遍历
与其他容器一样, map同样提供begin和end运算,以生成用于遍历整个容器的迭代器
map<string, int> word_count;...//get iterator positioned on the first elementmap<string, int>::const_iterator map_it = word_count.begin();//for each element in the mapwhile (map_it != word_count.end()) { //print the element key, value pairs cout << map_it->first << " occurs " << map_it->second << "times" << endl; ++map_it; // increment iterator to denote the next element}
0 0
- c++map 详解大全
- 1.c++-stl map详解
- C++STL之 map详解
- 【C++】:C++ STL中的map 详解
- Map详解
- map详解
- map详解
- map详解
- Map详解
- map详解
- c++map
- c++MAP
- map(c++)
- c++map
- C++map
- Map.Entry 遍历map详解
- 【c/c++】map
- Map.Entry和Map中的map.keySet()、map.entrySet()详解
- (转)聚类算法学习——ROCK 聚类算法
- web
- Python内置函数_集合操作类
- 史上最清晰的红黑树讲解(上)
- [转]最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现
- C++ map详解
- 构造函数,拷贝构造函数,析构函数,运算符重载
- ffmpeg——avformat_write_header写文件头
- 聊一聊Spring AOP
- jquery实现二级菜单下拉效果
- 洛谷 1651
- 【已解决,原因检讨中】JavaMail在tomcat中正常发送,在GlassFish中发送失败
- maven Springmvc-jsp页面引用js css images静态资源文件
- java nio学习笔记