在C++ STL中Multimap与Map的比较及示例
C++ STL中的Map
Map以有序的方式存储唯一的键值对。每个键都与一个可能是唯一的值相关联。键可以插入或删除,但不能被修改。与键相关联的值可以改变。使用键快速访问值是一种很好的方式,它可以在O(1)时间内完成。
输出
C++ STL中的Multimap
Multimap类似于map,但它允许多个元素具有相同的键。同时,键值对不需要在这种情况下是唯一的。关于multimap需要注意的一点是,它总是保持所有键的排序顺序。这些特性使得multimap在竞争编程中非常有用。
输出
时间和空间复杂度:
- 插入元素:每个插入操作的时间复杂度为O(log n),其中n是multimap中元素的数量。每个插入操作的空间复杂度为O(1)。
- 打印multimap:时间复杂度为O(n),其中n是multimap中元素的数量。空间复杂度为O(1)。
- 添加元素:每个插入操作的时间复杂度为O(log n),其中n是multimap中元素的数量。每个插入操作的空间复杂度为O(1)。
- 从一个multimap分配元素到另一个multimap:时间复杂度为O(n),其中n是被分配的元素的数量。空间复杂度为O(n),其中n是被分配的元素的数量。
- 移除所有小于某个键的元素:每个操作的时间复杂度为O(log n),其中n是multimap中元素的数量。每个操作的空间复杂度为O(1)。
- 移除所有特定键的元素:每个操作的时间复杂度为O(log n),其中n是multimap中元素的数量。每个操作的空间复杂度为O(1)。
- 查找键的lower bound和upper bound:每个操作的时间复杂度为O(log n),其中n是multimap中元素的数量。每个操作的空间复杂度为O(1)。
- 总的来说,程序的时间复杂度由插入和移除操作以及lower和upper bound操作的对数时间复杂度主导。空间复杂度与被分配的元素数量成线性关系。
C++ STL中Map和Multimap的区别
S No. | Map | Multimap |
---|---|---|
1 | 它存储唯一的键值对,其中每个键都是唯一的。 | 它可以存储重复的键值对,其中键可能不唯一。 |
2 | 在map上使用count()函数只能返回两个值,即0或1。 | 在multimap上使用count()函数可以返回任何非负整数。 |
3 | 访问任何键的值很容易,直接可访问。 | 访问任何键的值并不容易,而且无法直接访问。 |
4 | 使用键删除时,在map中只会删除一个键值对。 | 使用键删除时,在multimap中将删除具有相同键的所有键值对。 |
5 | 当需要快速访问值并使用键作为查找表的唯一索引时,可以使用map作为简单的查找表。 | 当需要使用键对值进行分组时,可以使用multimap。 |