哈希表的实现主要通过三种形式。
1. 数组 如 全由小写字母组成的字符串 A, B 查A B 是否是 异或字符串(有点像 1--1的桶)
2. set容器 通过set
3.
std::unordered_map<int, int> mp;
cout <<"这是unordered_map: " << endl;
for(int i = 1; i <= 5; i++)
{
mp.insert(pair<int, int>(a[i], i));
}
for(pair<int, int> kv : mp)
{
cout << kv.first << ' ' << kv.second << endl;
}
cout << endl << "这是multimap : " << endl;
std::multimap<int, int> mp1;
for(int i = 5; i >= 1; i--)
{
mp1.insert(pair<int, int>(a[i], i));
}
for(auto e : mp1)
{
cout << e.first << ' ' << e.second <<endl;
}
cout << endl << "来个map试一试 : " << endl;
map<int, int>mp2;
for(int i = 1; i <= 5; i++)
{
mp2.insert(pair<int, int>(a[i], i));
}
for(auto e : mp2)
{
cout << e.first << ' ' << e.second <<endl;
}
映射 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::map | 红黑树 | key有序 | key不可重复 | key不可修改 | O(log n) | O(log n) |
std::multimap | 红黑树 | key有序 | key可重复 | key不可修改 | O(log n) | O(log n) |
std::unordered_map | 哈希表 | key无序 | key不可重复 | key不可修改 | O(1) | O(1) |