c++中的unordered_map使用
时间: 2023-05-31 18:19:12 浏览: 164
### 回答1:
unordered_map是C++ STL中的一个关联容器,用于存储键值对。它的特点是无序,即不会按照键的顺序进行存储。unordered_map的底层实现是哈希表,因此它的查找、插入、删除等操作都具有较高的效率。
使用unordered_map需要包含头文件<unordered_map>。创建一个unordered_map对象可以使用以下语法:
unordered_map<key_type, value_type> map_name;
其中,key_type是键的类型,value_type是值的类型,map_name是unordered_map对象的名称。例如,创建一个存储字符串和整数的unordered_map对象可以使用以下语法:
unordered_map<string, int> my_map;
向unordered_map中插入元素可以使用insert()函数,例如:
my_map.insert(make_pair("apple", 3));
这行代码将一个键为"apple",值为3的键值对插入到my_map中。也可以使用以下语法:
my_map["apple"] = 3;
这行代码也可以实现同样的功能。
从unordered_map中查找元素可以使用find()函数,例如:
auto it = my_map.find("apple");
if (it != my_map.end()) {
cout << "The value of apple is " << it->second << endl;
}
这段代码将查找键为"apple"的元素,并输出它的值。如果找不到,find()函数将返回unordered_map的end()迭代器。
从unordered_map中删除元素可以使用erase()函数,例如:
my_map.erase("apple");
这行代码将删除键为"apple"的元素。
unordered_map还提供了其他一些常用的函数,例如size()、empty()、clear()等。需要注意的是,unordered_map中的元素是无序的,因此遍历unordered_map时,元素的顺序是不确定的。
### 回答2:
unordered_map是C++ STL中的一种容器,提供了一种基于键值对的快速查找机制。和map类似,但是不会对键值对进行特定的排序,因此查找速度更快,具有更好的性能。unordered_map的使用非常简单,可以使用标准库中的头文件<unordered_map>来引用。
unordered_map容器支持以下主要操作:
1.插入:insert
unordered_map容器中的insert函数可以插入一个键值对,如果键已经存在,则会覆盖该键对应的值。示例如下:
```C++
std::unordered_map<std::string, int> map;
map.insert(std::make_pair("apple", 5));
map.insert(std::make_pair("orange", 10));
map["banana"] = 8;
```
2.查找:find
unordered_map容器中的find函数可以在容器中查找指定键的值,如果找到了,则返回一个指向该键值对的迭代器,否则返回end()迭代器。示例如下:
```C++
auto iter = map.find("apple");
if (iter != map.end()) {
std::cout << "apple: " << iter->second << std::endl;
} else {
std::cout << "not found" << std::endl;
}
```
3.删除:erase
unordered_map容器中的erase函数可以删除指定键值对,示例如下:
```C++
auto iter = map.find("apple");
if (iter != map.end()) {
map.erase(iter);
}
```
4.遍历:使用迭代器进行遍历
unordered_map容器可以使用迭代器对容器进行遍历,示例如下:
```C++
for (auto iter = map.begin(); iter != map.end(); ++iter) {
std::cout << iter->first << ": " << iter->second << std::endl;
}
```
总的来说,unordered_map是一个非常实用的容器,可以在大部分需要进行快速查找、插入、删除的场景中使用。然而,由于unordered_map是使用哈希表实现的,因此在存储大量数据时,需要注意哈希表的负载因子,以及散列函数的效率等问题。
### 回答3:
unordered_map是C++ STL(标准模板库)中的一部分,提供了一种基于关键字查找和快速插入的数据结构。与map不同的是,unordered_map使用哈希表实现,使得它能够在O(1)时间内完成插入和查找操作,这使得unordered_map成为处理大量数据并需要快速查找的场景下的一种不错的选择。
unordered_map的定义与其他容器类似,例如:
``` cpp
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> m;
m["apple"] = 2;
m["banana"] = 4;
m["orange"] = 8;
cout << "The price of banana is " << m["banana"] << endl;
return 0;
}
```
上述代码中,我们使用了unordered_map存储了一些水果的名称和对应的价格。m["apple"] = 2; 中的"apple"是我们要存储的关键字,而2则是对应的值。这段代码中,我们也访问了map中的元素,m["banana"]将返回我们初始化时所设置的值4,如果某个键不存在,则会自动创建并分配默认值或抛出异常,这一点与map中的使用方式相同。
在实际使用中,unordered_map有以下一些常见的操作:
1. 插入元素
```cpp
unordered_map<string, int> m;
m["apple"] = 2;
```
2. 查找元素
```cpp
unordered_map<string, int> m;
m["apple"] = 2;
cout << "The price of apple is " << m["apple"] << endl;
```
3. 删除元素
```cpp
unordered_map<string, int> m;
m["apple"] = 2;
m.erase("apple");
```
除了上述操作,unordered_map还支持一些其他的方法,例如:
- size()方法,返回unordered_map容器中元素个数
- empty()方法,判断unordered_map容器是否为空
- find(key)方法,返回值为指向匹配关键字的元素迭代器,如果没有则返回尾部迭代器
- clear()方法,清除unordered_map中所有的元素
总之,unordered_map是一个非常方便实用的STL容器,能够快速地查询和插入数据,针对大量数据和快速查询的场景下,unordered_map的使用是非常值得考虑的。
阅读全文