目录
1.介绍
unordered_map是 C++ 标准库中的一个关联容器,用于存储键值对(key-value pairs)。它基于哈希表实现,提供了平均时间复杂度为 O(1) 的查找、插入和删除操作。与map不同,unordered_map不会对键进行排序,因此它不保证元素的顺序。
2.主要特点
1.基于哈希表:unordered_map使用哈希表来存储元素,因此它的查找、插入和删除操作的平均时间复杂度为 O(1)。
2.无序存储:元素在容器中的存储顺序是不确定的,不会根据键的值进行排序。
3.每个键在 unordered_map
中必须是唯一的,不能有重复的键。
4.自定义哈希函数和比较函数:可以通过自定义哈希函数和键比较函数来满足特定的需求。
3.unordered_map的用法
(1)定义和初始化。
std::unordered_map<std::string, int> umap;
(2)插入元素。
umap["apple"] = 10;
umap["banana"] = 20;
umap.insert({"orange", 30});
(3)访问元素
int apple_count = umap["apple"]; // 访问键为 "apple" 的值
(4)检测元素是否存在
if (umap.find("banana") != umap.end()) {
// 键 "banana" 存在
}
(5)删除元素
umap.erase("banana"); // 删除键为 "banana" 的元素
(6)遍历元素
for (auto it=pair.begin();it<=pair.end();it++) {
std::cout << pair->first << ": " << it->second << std::endl;
}
for (const auto& pair : umap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
(7)获取大小
size_t size = umap.size();
(8)清空容器
umap.clear();
(9)自定义哈希函数和比较函数
struct MyKey {
int id;
std::string name;
};
struct MyKeyHash {
std::size_t operator()(const MyKey& k) const {
return std::hash<int>()(k.id) ^ std::hash<std::string>()(k.name);
}
};
struct MyKeyEqual {
bool operator()(const MyKey& lhs, const MyKey& rhs) const {
return lhs.id == rhs.id && lhs.name == rhs.name;
}
};
std::unordered_map<MyKey, int, MyKeyHash, MyKeyEqual> custom_map;
4.性能问题
(1)哈希冲突:虽然unordered_map的平均时间复杂度为O(1),但在哈希冲突较多的情况下,性能可能会下降。
(2)内存使用:由于哈希表的实现,unordered_map 可能会使用较多的内存。
5.总结
unordered_map是一个高效的关联容器,适用于需要快速查找、插入和删除键值对的场景。由于它不保证元素的顺序,因此在需要有序存储的情况下,map可能是更好的选择。
如有错误,敬请指正!!!