1.map
map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的。
map容器根据键来自动进行排序,并且可以通过键快速查找对应的值。
map容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入、删除和査找操作的时间复杂度O(log n)。
count:一般用来判断key是否存在
2.multimap
不怎么用
multimap是一种关联容器,类似于map,但允许存储多个具有相同键的键值对。
multimap容器根据键来自动进行排序,并且可以通过键快速查找对应的值。
multimap容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入、删除和査找操作的时间复杂度。
![image-20240219215800862](image-20240219215800862.png)
3.unordered_map
unordered_map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的与map
和multimap不同,unordered_map不会根据键的顺序进行排序,而是使用哈希函数将键映射到存储桶中。
这使得unordered map具有更快的插入、删除和査找操作的时间复杂度,但不保证元素的顺序。
![image-20240219220103036](image-20240219220103036.png)
unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的。一般情况下我们更愿意使用复杂度稳定的map而不是unordered _map。
4.示例代码
#include <iostream>
#include <map>
using namespace std;
int main() {
// 创建并初始化map
map<int, string>myMap = { {1,"Apple"},{2,"Banana"},{3,"orange"} };
// 插入元素
myMap.insert(make_pair(4, "Grapes"));
// 查找和访问元素
cout << "Value at key 2:" << myMap[2] << endl;
// 遍历并打印 map 中的元素
for (const auto& pair : myMap) {
cout << "Key: " << pair.first << " ,Value:" << pair.second << endl;
}
// 删除元素
myMap.erase(3);
// 判断元素是否存在
if (myMap.count(3) == 0) {
cout << "Key 3 not found." << endl;
}
// 清空 map
myMap.clear();
// 判断 map 是否为空
if (myMap.empty()) {
cout << "Map is empty." << endl;
}
return 0;
}
#include <iostream>
#include <map>
using namespace std;
int main() {
//创建并初始化 multimap
multimap <int, string> myMultimap = { {1,"Apple"},{2,"Banana"},{2,"Orange"} };
//插入元素
myMultimap.insert(make_pair(3, "Grapes"));
// 查找和访问元素
auto range = myMultimap.equal_range(2);
for (auto it = range.first; it != range.second; ++it)
{
cout << "Key:" << it->first << ",Value:" << it->second << endl;
}
//遍历并打印 multimap 中的元素
for (const auto& pair : myMultimap) {
cout << "key:" << pair.first << ",Value:" << pair.second << endl;
// 删除元素
myMultimap.erase(2);
// 判断元素是否存在
if (myMultimap.count(2) == 0) {
cout << "Key 2 not found."<< endl;}
// 清空 multimap
myMultimap.clear();
// 判断 multimap 是否为空
if (myMultimap.empty()) {
cout << "Multimap is empty." << endl;
}
return 0;
}
equal_range
函数用于在关联容器中查找与指定键匹配的所有元素的范围。对于 multimap
,它可能包含多个具有相同键的元素,因此 equal_range
可以用来获取所有这些元素的范围。
在这种情况下,auto range = myMultimap.equal_range(2);
返回一个迭代器对,其中 range.first
是指向第一个键为 2
的元素的迭代器,range.second
是指向最后一个键为 2
的元素的下一个迭代器。
使用 equal_range
的主要优势是它可以更有效地找到具有相同键的所有元素,而不需要进行多次搜索。这在处理大型容器时可以提高效率。
向最后一个键为 2
的元素的下一个迭代器。
使用 equal_range
的主要优势是它可以更有效地找到具有相同键的所有元素,而不需要进行多次搜索。这在处理大型容器时可以提高效率。