c++中unordered_map的用法
时间: 2023-05-31 15:18:30 浏览: 151
### 回答1:
unordered_map 是 C++ 中 STL 库中的一种数据结构,它是一种哈希表,能够高效地存储键-值对。使用 unordered_map 需要包含 <unordered_map> 头文件。
下面是一个简单的例子:
```
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<std::string, int> myMap;
myMap["hello"] = 1;
myMap["world"] = 2;
std::cout << myMap["hello"] << std::endl; // 输出 1
std::cout << myMap["world"] << std::endl; // 输出 2
return 0;
}
```
unordered_map 也可以使用迭代器遍历,支持常用的 STL 方法,如 find, count, size, clear 等。
常用的构造函数有:
- `unordered_map<Key, T> map;` : 创建一个空的 unordered_map,默认桶的数量为0。
- `unordered_map<Key, T> map(n);` : 创建一个空的 unordered_map,预计容量为n。
- `unordered_map<Key, T> map(n, hasher);` : 创建一个空的 unordered_map,预计容量为n,并使用给定的 hasher 函数。
- `unordered_map<Key, T> map(n, hasher, key_equal);` : 创建一个空的 unordered_map,预计容量为n,并使用给定的 hasher 和 key_equal 函数。
### 回答2:
unordered_map是C++ STL中的一个关联容器,其存储元素的方式是以键值对的形式存储,即将一个值与一个键进行关联。与map不同的是,unordered_map并不会对键进行排序,因此其查找某个键的速度非常快,但是元素的次序并不和元素的插入顺序相同。
unordered_map的基本用法如下:
```
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> mymap; //创建一个以string为键,int为值的unordered_map
//用下标操作符[]添加元素
mymap["C++"] = 90;
mymap["Java"] = 95;
mymap["Python"] = 100;
//用at()函数获取元素的值
cout << "C++ score: " << mymap.at("C++") << endl;
//遍历unordered_map
for (auto it = mymap.begin(); it != mymap.end(); it++) {
cout << it->first << ": " << it->second << endl;
}
//删除元素
mymap.erase("Python");
//判断元素是否存在
if (mymap.count("Java") > 0) {
cout << "Java exists in mymap." << endl;
} else {
cout << "Java does not exist in mymap." << endl;
}
return 0;
}
```
除此之外,unordered_map还可以有自定义的哈希函数和键值对比较函数,用法与其他容器类似。unordered_map的时间复杂度为O(1),是一种非常高效的存储结构。因此在需要进行快速查找键值对的场合,可以选择unordered_map作为存储方式。
### 回答3:
unordered_map是C++ STL标准库中的一个关联容器,用于存储键值对。它是基于哈希表实现的,因此查找和插入元素的效率非常高,但多次遍历整个unordered_map的效率较低。
在使用unordered_map之前,需要包含头文件<unordered_map>。创建一个unordered_map可以使用如下语法:
```
std::unordered_map<Key, T> myMap;
```
其中Key是键的类型,T是值的类型。要向unordered_map 中添加元素,可以使用insert()方法:
```
myMap.insert(std::make_pair("tom", 22));
```
这个函数通过指定的键值对向unordered_map添加元素。实际上,在这个函数内部首先检查是否有相同的键(使用哈希表快速比较键),如果有,则返回existing pair的迭代器,如果没有,则插入新键值对并返回新pair的迭代器。
你还可以使用下标运算符[]将键值对插入到unordered_map中:
```
myMap["tom"] = 22;
```
如果要访问unordered_map中的元素,使用find()方法:
```
auto iter = myMap.find("tom");
if (iter != myMap.end()) {
std::cout << "The value is " << iter->second << std::endl;
} else {
std::cout << "Not found!" << std::endl;
}
```
这个函数返回一个迭代器,如果元素被找到,则返回指向元素的迭代器,否则返回一个指向unordered_map结尾的迭代器end()。找到元素后,可以使用迭代器的second成员来访问元素的值。
另外,删除元素也很简单。使用erase()方法:
```
myMap.erase("tom");
```
这个函数从unordered_map中删除指定的键,同时也删除与它相关的值。你也可以使用clear()方法,从unordered_map中删除所有元素。
除了以上介绍的方法之外,unordered_map还提供了许多其他的函数和操作符来访问和操作元素。需要根据实际情况选择使用。
阅读全文