关于STL的map用法总结

tech2022-09-18  98

map 容器是关联式容器的一种,存储的都是pair 类模板创建的键值对;键值对,其中第一个元素作为键(key),第二个元素作为值(value)。

在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。 默认情况下,map 容器选用std::less排序规则(其中 T 表示键的数据类型)是做升序排序

使用 map 容器存储的各个键值对,键的值既不能重复也不能被修改。

map的迭代器:C++ STL 标准库为 map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,map 容器迭代器只能进行 ++p、p++、–p、p–、*p 操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。

较常用的迭代器有:begin(), end(), find(key), lower_bound(key), upper_bound(key)等。 注意:find() 能帮我们查找指定 key 值的键值对,如果成功找到,则返回一个指向该键值对的双向迭代器;反之,其功能和 end() 方法相同。

关于map的查找方法: 1、重载运算符【】: 如果查找的键值对存在,借助重载的 [ ] 运算符才能成功获取该键对应的值; 如果不存在,则为向该 map 容器中增添一个键值对,值的数据类型,如果是基本数据类型(int/double/longlong),则值为 0;如果是 string 类型,其值为 “”,即空字符串(即使用该类型的默认值作为键值对的值) 2、at()函数 at() 成员方法也需要根据指定的键,才能从容器中找到该键对应的值 不同之处在于,如果在当前容器中查找失败,该方法不会向容器中添加新的键值对,而是直接抛出 out_of_range 异常。 3、如果以上方法都不适用,我们还可以遍历整个 map 容器,找到包含指定键的键值对,进而获取该键对应的值,例如:

for (auto iter = myMap.begin(); iter != myMap.end(); ++iter) { //调用 string 类的 compare() 方法,找到一个键和指定字符串相同的键值对 if (!iter->first.compare("C语言教程")) { cout << iter->first << " " << iter->second << endl; } } return 0;

关于map的插入数据方法: 1、重载运算符【】:如果键值在已有的map里不存在,则为向该 map 容器中增添一个键值对,值的数据类型,如果是基本数据类型(int/double/longlong),则值为 0;如果是 string 类型,其值为 “”,即空字符串(即使用该类型的默认值作为键值对的值) 2、用insect()函数:返回的是一个pair,其中 pair.first 表示一个迭代器,pair.second 为一个 bool 类型变量(不过插入的时候可以不管返回值)

最新回复(0)