stdmap和stdunordered_map有什么区别?
时间: 2024-01-19 10:18:14 浏览: 76
std::map和std::unordered_map是C++标准库中的两种不同的关联容器,它们有以下区别:
1. 内部实现方式不同:
- std::map是基于红黑树实现的有序关联容器,它按照键的顺序进行排序。
- std::unordered_map是基于哈希表实现的无序关联容器,它使用哈希函数将键映射到桶中,不保证元素的顺序。
2. 插入和查找操作的时间复杂度不同:
- std::map的插入和查找操作的平均时间复杂度为O(log n),其中n是元素的数量。
- std::unordered_map的插入和查找操作的平均时间复杂度为O(1),但最坏情况下可能达到O(n)。
3. 内存占用不同:
- std::map在内存中存储额外的指针和节点,因此占用的内存比std::unordered_map更多。
- std::unordered_map使用哈希表存储元素,因此占用的内存相对较少。
4. 迭代器的稳定性不同:
- std::map的迭代器在插入和删除操作后仍然有效,不会失效。
- std::unordered_map的迭代器在插入和删除操作后可能会失效,因为哈希表的重新哈希可能导致元素重新分布。
下面是一个演示std::map和std::unordered_map的例子:
```cpp
#include <iostream>
#include <map>
#include <unordered_map>
int main() {
// 使用std::map
std::map<int, int> map;
map.insert(std::make_pair(1, 10));
map.insert(std::make_pair(2, 20));
map.insert(std::make_pair(3, 30));
std::cout << "std::map:" << std::endl;
for (const auto& pair : map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
// 使用std::unordered_map
std::unordered_map<int, int> unordered_map;
unordered_map.insert(std::make_pair(1, 10));
unordered_map.insert(std::make_pair(2, 20));
unordered_map.insert(std::make_pair(3, 30));
std::cout << "std::unordered_map:" << std::endl;
for (const auto& pair : unordered_map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
```
阅读全文