map/multimap

使用map/multimap之前要加入头文件#include,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。

map和multimap内部的数据结构也是平衡二叉树。map 和 multimap 拥有 set 和 multiset 所有能为和所有操作函数。

map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。

1.常用函数

注意:所有的搜索函数,参数是key,而不是value。这样你就不能以 find() 搜寻拥有某特定 value 的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//返回键值等于 key 的元素个数
m.count(key)
//返回键值等于 key 的第一个元素,找不到就返回 end()
m.find(key)
//返回 键值 >= key 的第一个元素位置
m.lower_bound(key)
//返回 键值 >= key 的第一个元素位置
m.upper_bound(key)
//返回 键值 == key 的元素区间
m.equal_range(key)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//插入
c.insert(elem)
c.insert(pos,elem)
c.insert(beg,end)
//删除
c.erase(elem)
c.erase(pos)
c.erase(beg,end)
//使迭代器失效,注意!!!!
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;
//remove all elements having a certain value
for (pos = coll.begin(); pos != coll.end(); )
{
if (pos->second == value) {
c.erase(pos++); // Make clear!!
}
else {
++pos;
}
}

将value值传入map

1
2
3
4
//直接赋值
coll["otto"] = 7.7;
//用make_pair()
coll.insert(std::make_pair("otto",22.3));

引用http://blog.csdn.net/lwbeyond/article/details/7313204#

STL