C++中的哈希类容器有哪些
时间: 2024-02-05 09:59:55 浏览: 21
C++中的哈希类容器有unordered_map、unordered_set、unordered_multimap和unordered_multiset。这些容器使用哈希表来存储元素,可以实现常数时间的查找、插入和删除操作,对于存储大量元素的情况,它们比使用传统的关联容器(如map和set)更高效。
相关问题
c++容器哈希表的插入
c++容器中的哈希表是通过vector实现的。在插入元素时,先检查是否需要扩容,如果需要,就创建一个新的HashTable进行扩容,并将原HashTable中的元素重新映射到新表中,最后通过vector的swap函数交换两个表的vector。然后再通过哈希函数找到插入位置,如果该位置已经被占用,则继续往后找,直到找到空的位置为止。插入元素时,还需要判断该元素在哈希表中是否已经存在,如果存在则直接返回false,否则将该元素插入到哈希表中。字符串在哈希表中的处理方式是取出每一个字符并将其相加得到一个整形key进行比较。
c++中的哈希容器unordered_map使用示例csdn
unordered_map是C++ STL库中的一个哈希容器,它能够快速地根据key值查找对应的value,其底层结构是基于哈希表实现的。unordered_map可以用于存储键值对,其中key值用来索引value。由于哈希表的特性,在大多数情况下,unordered_map的查找速度都比其他容器如vector和map更快。
使用unordered_map时需要引入头文件<unordered_map>,并使用命名空间std。下面是一个unordered_map的使用示例:
```cpp
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
// 定义并初始化unordered_map
unordered_map<int, string> umap = { { 1, "One" }, { 2, "Two" }, { 3, "Three" } };
// 遍历unordered_map
for (auto itr = umap.begin(); itr != umap.end(); itr++)
{
cout << "Key: " << itr->first << " Value: " << itr->second << endl;
}
// 查找某个key对应的value
int key = 2;
auto itr = umap.find(key);
if (itr != umap.end())
{
cout << "Value of key " << key << " is " << itr->second << endl;
}
// 删除某个key-value对
umap.erase(3);
// 插入一个新的key-value对
umap.insert(make_pair(4, "Four"));
// 修改某个key对应的value
umap[2] = "New Two";
// 输出修改后的unordered_map
for (auto itr = umap.begin(); itr != umap.end(); itr++)
{
cout << "Key: " << itr->first << " Value: " << itr->second << endl;
}
return 0;
}
```
上面的代码首先定义了一个类型为<int, string>的unordered_map,并初始化了三个key-value对。然后使用迭代器遍历了整个容器,并查找了key值为2的value。接着使用erase方法删除了key值为3的键值对。使用insert方法插入了一个新的键值对。最后使用数组形式修改了key值为2的value,并通过迭代器输出了修改后的容器。
总而言之,unordered_map是一个方便快速的哈希容器,具有高效的查找和插入操作。在实际使用中,可以根据不同的需求和特点选择不同的容器。