💡 作者简介:专注分享高性能服务器后台开发技术知识,涵盖多个领域,包括C/C++、Linux、网络协议、设计模式、中间件、云原生、数据库、分布式架构等。目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。
💡 公众号:Lion 莱恩呀。
👉
🎖️ CSDN实力新星、专家博主,阿里云博客专家、华为云云享专家
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu
🔔 上一篇:【045】高效排序与存储:C++ STL中的set与multiset详解
在C++中,和容器是非常重要的数据结构,它们提供了一种键值对的映射关系,可以高效地组织和访问数据。容器中的每个元素都包含一个键和一个值,而容器允许键重复。
这两种容器在实际项目中广泛应用,特别适合需要快速查找和插入元素的场景。其底层实现采用了红黑树等高效的数据结构,和容器在处理大量数据时具有良好的性能表现。它们也提供了丰富的操作方法和函数,可以轻松地对容器中的数据进行插入、删除、查找和遍历操作。
深入理解和容器的使用方法和性能特点可以设计高效的数据结构和算法,提高程序的性能和可维护性。
的特性是,所有元素都会根据元素的键值自动排序。所有的元素都是,同时拥有实值和键值,的第一元素被视为键值,第二元素被视为实值, 不允许两个元素有相同的键值。我们可以通过的迭代器改变的键值吗?答案是不行,因为 的键值关系到 元素的排列规则,任意改变键值将会严重破坏数据组织。如果想要修改元素的实值,那么是可以的。
和拥有相同的某些性质,当对它的容器元素进行新增操作或者删除操作时,操作之前的所有迭代器,在操作完成之后依然有效,当然被删除的那个元素的迭代器必然是个例外。
容器提供了快速的查找、插入和删除操作,时间复杂度为。
与类似,也是对的容器,不同之处在于它允许重复的键。容器同样是有序的,使用红黑树来组织数据,提供了快速的查找、插入和删除操作,时间复杂度为。

容器:每个元素都是键值-实值成对存储,自动根据键值排序,键值不能重复,不能修改。
和的操作类似,唯一区别 multimap 键值可重复 。和都是以红黑树为底层实现机制。
(1)构造函数:
(2)赋值操作:
(3)大小操作:
(4)插入数据元素操作:
(5)删除操作:
(6)查找操作:
(7)访问元素:
- :通过键访问对应的值。
- :通过键访问对应的值,如果不存在会抛出异常。
- :查找键为的元素,返回指向该元素的迭代器。
(1)创建和初始化和容器:
(2)插入和删除元素:
(3)查找和访问元素:
(4)遍历容器的所有元素:
和都是关联容器,它们都基于红黑树实现。它们之间的主要区别在于:
- 中的每个键都是唯一的,而允许多个具有相同键的元素存在。
- 中的元素在树中是按键值排序的,而中的元素则按照键的比较函数进行排序。
从性能上来说,通常比具有更好的性能,因为中的键是唯一的,可以更快地进行查找和访问操作。
如何选择:
- 要保持键的唯一性,应该选择。
- 要允许多个具有相同键的元素存在,那么就应该选择。
(1)自定义比较函数和排序:在默认情况下,和容器使用元素的键值进行排序,但是有时候要根据不同的标准进行排序,这就需要自定义比较函数。
自定义比较函数需要满足严格弱顺序(Strict Weak Ordering)的要求:
- 反对称性:如果 a 不小于 b 且 b 不小于 a,则 a 等于 b。
- 传递性:如果 a 小于 b 且 b 小于 c,则 a 也小于 c。
- 可以相等:两个元素可以相等。
示例:
(2)处理重复键(multimap):遍历查找特定键的所有值。
(3)对map和multimap容器中的数据进行排序:
- 对 容器进行元素值排序:可以将 中的键值对元素复制到一个 中,然后使用自定义的比较函数对 进行排序:
- 对 容器进行元素值排序:由于 允许重复的键值,我们可以使用相似的方法将 中的元素复制到一个 中,并使用自定义的比较函数对 进行排序:
这样就可以使用自定义的比较函数对 和 容器中的元素值进行排序。在需要按照元素值而不是键值进行排序时,这些方法都比较有用。
(1)容器的使用。
输出:
(2)的示例。
map和multimap是C++标准库中非常重要且常用的容器类型,它们都是关联式容器(Associative Containers),用于实现键值对映射。
- map和multimap容器使用红黑树实现,因此能够在O(log n)的时间复杂度内进行查找和检索操作,这使得它们非常适合于需要快速查找特定键值的应用场景。
- 这两种容器中的元素默认按照键值进行排序,map要求键值唯一,而multimap允许键值重复。这使得它们非常适合于建立有序的键值对映射,使得对数据的处理更加方便。
- 由于其快速查找和自动排序的特性,map和multimap容器可以应用于各种类型的问题,如数据存储、索引管理、关联规则等。
- map和multimap容器提供了各种方法来插入、删除和修改元素,同时它们还提供了丰富的迭代器接口和算法,对数据的操作更加灵活和方便。

版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/8140.html