C++ STL排序关联式容器 (二)map / set
一、C++容器分类
C++容器可分为序列式容器和关联式容器两大类,序列式容器包括 array、vector、list(双向链表)、deque(双端队列) 和 forward_list,关联式容器又分为排序关联式容器和无序关联式容器
换句话说STL 提供有 3 类标准容器,分别是序列容器、排序容器和哈希容器,其中后两类容器有时也统称为关联容器
关联式容器存储的是**“键值对”**形式的数据
二、键值对pair类
头文件<utility>
提供创建 pair 对象的方法之外,还为 pair 对象重载了 <、<=、>、>=、==、!= 这 6 的运算符,对于进行比较的 2 个 pair 对象,先比较 pair.first 元素的大小,如果相等则继续比较 pair.second 元素的大小,对于进行比较的 2 个 pair 对象,其对应的键和值的类型比较相同,否则将没有可比性。
swap()互换 2 个 pair 对象的键值对,前提是这 2 个 pair 对象的键和值的类型要相同
pair1.swap(pair2)
make_pair(key,value)
三、map 、set
<map> 头文件中,并位于 std 命名空间
作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、使用结构体或类自定义的类型。
map 容器按照既定的规则自动根据各键值对的键的大小做升序排序。默认情况下选用std::less排序规则(其中 T 表示键的数据类型)也可以自定义排序规则
map 容器存储的各个键值对,键的值既不能重复也不能被修改。换句话说,map 容器中存储的各个键值对不仅键的值独一无二,键的类型也会用 const 修饰,这意味着只要键值对被存储到 map 容器中,其键的值将不能再做任何修改。
multimap 和 map 容器的区别在于,容器中可以同时存储多(≥2)个键相同的键值对
set仍然是以键值对存储数据,它和map的唯一的区别在于set只能存key和value的值相等的键值对为了节约空间当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可使用 set 容器存储的各个元素的值必须各不相同
各种各种关联式荣容器的使用方法和无序关联式容器完全一样 传送门
(https://blog.****.net/Wjf7496/article/details/108987535)