unorder_map的用法
时间: 2023-04-12 08:01:49 浏览: 155
unordered_map是C++ STL中的一个关联容器,它提供了一种将键映射到值的方式。它使用哈希表来实现,因此查找和插入操作的时间复杂度为O(1)。使用unordered_map时,需要包含头文件<unordered_map>。下面是一个简单的示例:
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_map<std::string, int> mymap = {
{"apple", 1},
{"banana", 2},
{"orange", 3}
};
std::cout << "The value of apple is " << mymap["apple"] << std::endl;
return 0;
}
这个程序创建了一个unordered_map,将字符串键映射到整数值。然后,它输出了键"apple"对应的值。
相关问题
unorder_map查询失败
如果你使用的是 C++ STL 中的 `unordered_map`,当查询一个不存在的键值时,它会返回一个默认值。具体来说,当你使用 `[]` 操作符查询不存在的键值时,它会插入一个键为该值的默认值,并返回该值的引用;而当你使用 `at()` 方法查询不存在的键值时,则会抛出一个 `std::out_of_range` 异常。因此,你可以通过判断返回值是否等于默认值来判断查询是否成功,如下所示:
```cpp
std::unordered_map<std::string, int> umap = {{"apple", 1}, {"banana", 2}, {"orange", 3}};
auto it = umap.find("pear");
if (it != umap.end()) {
std::cout << "Found: " << it->second << std::endl;
} else {
std::cout << "Not found" << std::endl;
}
```
如果你需要使用 `[]` 操作符查询键值,且希望当查询失败时返回一个特定的值,可以使用 `at()` 方法结合异常处理来实现,如下所示:
```cpp
std::unordered_map<std::string, int> umap = {{"apple", 1}, {"banana", 2}, {"orange", 3}};
try {
int value = umap.at("pear");
std::cout << "Found: " << value << std::endl;
} catch (const std::out_of_range& e) {
std::cout << "Not found" << std::endl;
}
```
当然,你也可以使用 `count()` 方法来查询键值是否存在,如下所示:
```cpp
std::unordered_map<std::string, int> umap = {{"apple", 1}, {"banana", 2}, {"orange", 3}};
if (umap.count("pear")) {
std::cout << "Found" << std::endl;
} else {
std::cout << "Not found" << std::endl;
}
```
unorder_map的特点
unordered_map是C++ STL的容器之一,它提供了哈希表的实现方式。与map相比,unordered_map的插入、查找、删除操作的时间复杂度都是O(1),而map是O(logn)。unordered_map的特点如下:
1. 基于哈希表实现,具有良好的查找性能。
2. 插入、查找、删除操作的时间复杂度都是O(1),最坏情况下为O(n)。
3. 元素的存储是无序的。
4. 支持自定义的哈希函数和比较函数。
5. 不支持元素的排序。
6. 比map的空间占用更大。
7. 允许存储重复的元素。
8. 使用迭代器遍历元素时,遍历的顺序是随机的。
9. 支持动态扩容,但是扩容会导致所有元素的重新哈希。
10. 对于一些有序性要求较高的场景,不适合使用unordered_map。
阅读全文