Map 与 Multimap
来源:互联网 发布:node excelexport 编辑:程序博客网 时间:2024/06/05 09:34
一. Map与 Multimap 特点
Map 和 Multimap 将(key/value) 一组当做元素,它们可以根据 key 的排序准则自动将元素排序。
Multimap允许重复元素,map不允许重复。
类型定义:
- typedef std::map<std::string, float, std::greater<string> > StringFloatMap;
- ...
- StringFloatMap coll;
注意,两个>之间需加上一个空格,因为>>会被编译器视为移位操作符。
Map 和 multimap 通常以平衡二叉树来实现,map 和 multimap 拥有 set 和 multiset 所有能为和所有操作函数。
通常,不能直接改变key 的值,value 的值是可以直接修改的,因此可以想像元素的实质类型是 pair<constkey, T>。
二. 搜索函数
- //返回键值等于 key 的元素个数
- m.count(key)
- //返回键值等于 key 的第一个元素,找不到就返回 end()
- m.find(key)
- //返回 键值 >= key 的第一个元素位置
- m.lower_bound(key)
- //返回 键值 >= key 的第一个元素位置
- m.upper_bound(key)
- //返回 键值 == key 的元素区间
- m.equal_range(key)
注意:
所有的搜索函数,参数是key,而不是value。这样你就不能以 find() 搜寻拥有某特定 value 的元素。
三. 插入和删除函数
- //插入
- c.insert(elem)
- c.insert(pos,elem)
- c.insert(beg,end)
- //删除
- c.erase(elem)
- c.erase(pos)
- c.erase(beg,end)
注意:
删除元素时,会使 pos 无效,如下
- //使迭代器失效,注意!!!!
- typedef std::map<std::string,float> StringFloatMap;
- StringFloatMap coll;
- StringFloatMap::iterator pos;
- ...
- for (pos = coll.begin(); pos != coll.end(); ++pos)
- {
- if (pos->second == value) {
- coll. erase (pos); // 出错 !!!
- }
- }
- //正确处理迭代器所指元素的方法
- typedef std::map<std::string,float> StringFloatMap;
- StringFloatMap coll;
- StringFloatMap::iterator pos, tmp_pos;
- ...
- //remove all elements having a certain value
- for (pos = c.begin(); pos != c.end(); )
- {
- if (pos->second == value) {
- c.erase(pos++); // Make clear!!
- }
- else {
- ++pos;
- }
- }
四. 将 map 视为关联数组
m[key],这里下标是元素key,索引可以是任意类型,而非局限为整型。
注意:
- coll["otto"] = 7.7;
不小心会引起误操作,如:
- std::cout << coll ["ottto"]; // otto拼写错了
五. 将 value 值传入 map
1. 运用 value_type,value_type 是容器本身提供的类型定义。
- std::map<std::string,float> coll;
- ...
- coll.insert(std::map<std::string, float>::value_type("otto", 22.3));
注,系统中 value_type 的定义如下:
typedef pair<const Key, T> value_type;
2. 运用 pair< >
- std::map<std::string, float> coll;
- ...
- //隐式转换为const:
- coll.insert(std::pair<std::string, float>("otto",22.3));
- //显示转换:
- coll.insert(std::pair<<strong>const</strong> std::string, float>("otto",22.3));
- std::map<std::string,float> coll;
- ...
- coll.insert(std::make_pair("otto",22.3));
注:以上三种方法,在实际开发中可以试着用,因为有些编译器并不能很好的支持其中方法,比如 VC6.0 就不能很好的使用 make_pair(),不过改用value_type是可以的。
0 0
- map与multimap
- Map与Multimap用法
- STL-------map与multimap
- Map 与 Multimap
- map与multimap的用法
- STL 中的map与multimap
- map(multimap)与pair
- map与multimap区别,find具体使用
- STL学习之map与multimap
- C++的map与multimap的使用
- Map容器与multimap容器应用的小知识
- set/multiset,map/multimap的使用与比较+pair介绍
- STL与泛型编程<六>:map和multimap
- C++之STL(6)之 map 与 multimap 关联容器
- STL学习之map与multimap操作练习
- STL::map,multimap用法
- std::map和multimap
- Map和MultiMap使用
- 琐事小记
- 数据类型转换,常量池,及final关键字
- Hello,world
- 并排打印不同形状三角形(Modified Triangle Printing Program)
- win平台C语言油槽通信
- Map 与 Multimap
- [代码实例][C语言]MD5算法
- 文章标题
- Chromium网页输入事件处理机制简要介绍和学习计划
- fread读取模式的选择
- 文章标题
- [代码实例][C++]MD5算法
- Java面向对象
- python两种方法实现从1000万个随机数中找出top n元素(附c语言版)