文章中的文字可能存在语法错误以及标点错误,请谅解;
如果在文章中发现代码错误或其它问题请告知,感谢!
map
是一种关联容器(有序键值对容器),由键值Key
和映射值Value
组合而成的元素,容器中的元素顺序按照键值的取值升序排列。
在map
中,键值Key
是标识和排序的唯一标识元素,映射值Value
存储着与键值Key
相关联的内容数据,所以可以根据键来查找关联数据。另外,键Key
和Value
是不同的类型,可以用std::pair
组合Key
和Value
两种类型。
map
通常实现为红黑树。
map
中的映射值Value
可以通过键值Key
和括号操作符(operator[]
)访问。
map
容器定义在#include <map>
头文件中,定义如下:
template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const Key, T> > > class map;
参数模板:
Key
:键的类型。map
中的每个元素都由其键值唯一标识。别名为成员类型map::key_type
。
T
:映射值的类型。map
中的每个元素都将一些数据存储为其映射值。别名为成员类型map::mapped_type
。
Compare
:一个二进制谓词,它接受两个键值作为参数并返回一个bool
值。在表达式 comp(a, b)
中,comp
是Compare
类型的对象,a
和b
是键值,如果a
被认为在b
之前,则表达式comp(a, b)
应该返回true
。map
对象使用这个表达式来确定容器中元素的顺序以及两个元素的键是否相等。Compare
可以是函数指针或函数对象,默认为 less<T>
,其返回与使用小于操作符(a
<b
)相同的结果。别名为成员类型map::key_compare
。
Alloc:分配器对象的类型,用于定义存储分配模型。默认情况下,使用allocator
类模板,该模板定义最简单的内存分配模型,并且与值无关。别名为成员类型map::allocator_type
。
#include <iostream> #include <assert.h> #include <map> using namespace std; int main(void) { //初始化 std::map<int, string> map1; std::map <int, std::string> map2 = { {1,"AA"}, {2,"BB"}, {3,"CC"}, }; //插入 // 如果已经存在键值,则会作赋值修改操作,如果没有则插入 map2[3] = "CC2"; map2[4] = "DD"; //通过insert插入 map2.insert(std::pair<int, std::string>(5, "EE")); //取值 std::cout << map2.at(3).c_str() << std::endl;//map2[3]存在,不会报错 //Map中元素取值主要有at和[]两种操作,at会作下标检查,而[]不会。 //std::cout<< map2.at(6).c_str()<< std::endl;//使用at会进行关键字检查,因为没有6因此报错 std::cout << map2[7].c_str() << std::endl;//键值中没有关键字7,但使用[]取值会导致插入,因此不会报错,但打印结果为空 auto iter = map2.find(3); if(iter == map2.end()) { assert(false); //若没有该键值则会返回end return -1; } auto value = iter->second; //second返回iter的value //遍历 for(auto item =map2.begin();item!=map2.end();item++) { auto value= item->second; if(value == "CC2") { std::cout << "find!" << std::endl; } } return 0; }
运行结果:
CC2 find!
以上。
参考文档:
1.https://www.apiref.com/cpp-zh/cpp/container/map.html
2.https://blog.csdn.net/wcc27857285/article/details/78289175