1. 所在头文件<map>. 命名空间std, 声明如下:
1 namespace std{ 2 template <class Key,class T, 3 class Compare = less<Key>, 4 class Allocator = allocator<pair<const Key,T> > > 5 class map; 6 template <class Key,class T, 7 class Compare = less<Key>, 8 class Allocator = allocator<pair<const Key,T> > > 9 class multimap; 10 }
- key/value必须具备 assignable+copyable; key 必须comparable
- 元素的次序由key决定, 与value无关.
- 可以把set/multiset视为特殊的map/multimap.
- 也是使用红黑树实现的.
2. map/multimap的构造/析构
1 map c; 2 map c(op); 3 map c1(c2); 4 map c(beg,end); 5 map c(beg,end,op); 6 c.~map();
3. 非变动性操作
1 c.size(); 2 c.empty(); 3 c.max_size(); 4 各类算术运算
4. 查询操作
count(key);
find(key);
lower_bound(key);
upper_bound(key);
equal_range(key)
5. map 和multimap不提供元素直接存取, 因此元素存取通常由迭代器进行 , map提供 []操作符, 可以直接存取.
- 在map/multimap的定义中可以看到 key是const的,保证了不会被破坏key, 也不会破坏已经排好序的元素.
- 如果要移除元素, 只能用它提供的成员函数.
- find()只能针对key查找, 查找value可以用find_if() 或者直接遍历.
6. 使用value_type避免隐式类型转换
- coll.insert(std::map<std::string,float>::value_type("roger","21")); value_type 是容器本身提供的类型定义.
7. pair<>
- coll.insert(std::pair<std::string,float>("roger",21));
8. make_pair()算法函数
- coll.insert(std::make_pair("roger",21));