一、前言

在应用 map 容器存储多个键值对时,该容器会主动依据各键值对的键的大小,依照既定的规定进行排序。默认状况下,会依据键的大小对所有键值对做升序排序。
留神点:应用 map 容器存储的各个键值对,键的值既不能反复也不能被批改,即键的类型会用 const 润饰,且是一对一的关系。
应用map容器应蕴含头文件:

#include <map>using namespace std; //不是必须的

1、map容器的模板定义

template < class Key,  // 指定键(key)的类型                                           class T,    // 指定值(value)的类型                                          class Compare = less<Key>,  // 指定排序规定                              class Alloc = allocator<pair<const Key,T> >    // 指定分配器对象的类型           > class map;

尽管map的模板有4个参数,然而大多数状况下只须要设置前2个参数即可。

二、创立map容器办法

①std::map<std::string, std::string> myMap;②std::map<std::string, std::string> myMap{ {"1","lin"},{"2","wei"} };③std::map<std::string, std::string> newMap(myMap);④std::map<std::string, std::string> newMap(myMap.begin(), myMap.end());⑤std::map<std::string, std::string, std::less<std::string> > myMap{ {"1","lin"},{"2","wei"} };

三、map容器办法

此处不列举迭代器、插入和删除相干办法

办法性能
find(key)在 map 容器中查找键为 key 的键值对,如果胜利找到,则返回指向该键值对的双向迭代器;反之,则返回和 end() 办法一样的迭代器。另外,如果 map 容器用 const 限定,则该办法返回的是 const 类型的双向迭代器
lower_bound(key)返回一个指向以后 map 容器中第一个大于或等于 key 的键值对的双向迭代器。如果 map 容器用 const 限定,则该办法返回的是 const 类型的双向迭代器
upper_bound(key)返回一个指向以后 map 容器中第一个大于 key 的键值对的迭代器。如果 map 容器用 const 限定,则该办法返回的是 const 类型的双向迭代器
equal_range(key)该办法返回一个 pair 对象(蕴含 2 个双向迭代器),其中 pair.first 和 lower_bound() 办法的返回值等价,pair.second 和 upper_bound() 办法的返回值等价。也就是说,该办法将返回一个范畴,该范畴中蕴含的键为 key 的键值对(map 容器键值对惟一,因而该范畴最多蕴含一个键值对)
empty()若容器为空,则返回 true;否则 false
size()返回以后 map 容器中存有键值对的个数
max_size()返回 map 容器所能包容键值对的最大个数,不同的操作系统,其返回值亦不雷同
operator[]map容器重载了 [] 运算符,只有晓得 map 容器中某个键值对的键的值,就能够向获取数组中元素那样,通过键间接获取对应的值
at(key)找到 map 容器中 key 键对应的值,如果找不到,该函数会引发 out_of_range 异样
count(key)在以后 map 容器中,查找键为 key 的键值对的个数并返回。留神,因为 map 容器中各键值对的键的值是惟一的,因而该函数的返回值最大为 1

四、实例

1、lower_bound、upper_bound和equal_range

std::map<int, string> mapInfo{ {1,"test"},{2,"lin"},{3,"wei"} };std::map<int, string>::iterator mapIter = mapInfo.lower_bound(1);std::cout << "lower_bound key: " << mapIter->first << " value: " << mapIter->second << std::endl;mapIter = mapInfo.upper_bound(1);std::cout << "upper_bound key: " << mapIter->first << " value: " << mapIter->second << std::endl;pair<map<int, string>::iterator, map<int, string>::iterator> iters = mapInfo.equal_range(3);std::map<int, string>::iterator beginIter, endIter;beginIter = iters.first;endIter = iters.second;for (beginIter; beginIter != endIter; beginIter++){    std::cout << "equal_range key: " << beginIter->first << " value: " << beginIter->second << std::endl;}

后果如下: