文章目录
- 5.2 C++ STL关联式容器
- 5.2.1 C++ STL map容器
- 5.2.2 C++ STL multimap容器
- 5.2.3 C++ STL set容器
- 5.2.2 C++ STL multiset容器
- 5.3 C++ STL无序容器(哈希容器)
- 参考
5.2 C++ STL关联式容器
关联式容器在存储元素值的同时,会为各元素额外再配备一个值(又称为“键”,其本质也是一个 C++ 基础数据类型或自定义类型的元素),它的功能是在使用关联式容器的过程中,如果已知目标元素的键的值,则直接通过该键就可以找到目标元素,而无需再通过遍历整个容器的方式。
关联式容器的种类:
5.2.1 C++ STL map容器
创建map容器的几种方法:
(1)通过调用map容器类的默认构造函数,可以创建一个空的map容器
std::map<std::string, int>myMap;
(2)创建map的同时初始化
std::map<std::string,int>myMap{{“学习”,10},{“教程”,20}};
(3)利用之前已经创建好的map容器,再创建一个新的map容器
std::map<std::string, int>newMap(myMap);
(4)map 类模板还支持取已建 map 容器中指定区域内的键值对,创建并初始化新的 map 容器。
std::map<std::string, int>myMap{ {“C语言教程”,10},{“STL教程”,20} };
std::map<std::string, int>newMap(++myMap.begin(), myMap.end());
(5)在以上几种创建 map 容器的基础上,我们都可以手动修改 map 容器的排序规则。默认情况下,map 容器调用 std::less 规则,根据容器内各键值对的键的大小,对所有键值对做升序排序。
std::map<std::string, int>myMap{ {"C语言教程",10},{"STL教程",20} };
std::map<std::string, int, std::less<std::string> >myMap{ {"C语言教程",10},{"STL教程",20} };
5.2.2 C++ STL multimap容器
map 容器的区别在于,multimap 容器中可以同时存储多(≥2)个键相同的键值对。
5.2.3 C++ STL set容器
和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。
基于 set 容器的这种特性,当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可。
5.2.2 C++ STL multiset容器
和 set 容器不同的是,multiset 容器可以存储多个值相同的元素
5.3 C++ STL无序容器(哈希容器)
关联式容器的底层实现采用的树存储结构,更确切的说是红黑树结构;无序容器的底层实现采用的是哈希表的存储结构。
基于底层实现采用了不同的数据结构,因此和关联式容器相比,无序容器具有以下 2 个特点:
1、无序容器内部存储的键值对是无序的,各键值对的存储位置取决于该键值对中的键,
2、和关联式容器相比,无序容器擅长通过指定键查找对应的值(平均时间复杂度为 O(1));但对于使用迭代器遍历容器中存储的元素,无序容器的执行效率则不如关联式容器。
和关联式容器一样,无序容器只是一类容器的统称,其包含有 4 个具体容器,分别为 unordered_map、unordered_multimap、unordered_set 以及 unordered_multiset。
参考
部分内容参考于C语言中文网;一个很不错的编程网站,建议大家多看看。