c++ unordered map
时间: 2023-11-06 18:08:01 浏览: 109
C++ 中的 unordered_map 是一种关联容器,它提供了基于键值对的快速查找功能。它的底层实现是哈希表,因此查找的时间复杂度为 O(1)。
使用 unordered_map 需要包含头文件 <unordered_map>,并且可以使用 std 命名空间。
下面是一个简单的例子:
```c++
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> umap;
// 插入键值对
umap.insert({"apple", 1});
umap.insert({"banana", 2});
umap.insert({"cherry", 3});
// 查找键值对
std::cout << "apple: " << umap["apple"] << std::endl;
std::cout << "banana: " << umap["banana"] << std::endl;
std::cout << "cherry: " << umap["cherry"] << std::endl;
return 0;
}
```
输出结果为:
```
apple: 1
banana: 2
cherry: 3
```
相关问题
C++unorderedmap
### C++ `unordered_map` 的基本概念
`unordered_map` 是一种关联容器,它存储键值对并允许快速查找、插入和删除操作。与 `map` 不同的是,`unordered_map` 使用哈希表实现,因此不保持按键的任何特定顺序。
#### 创建和初始化 `unordered_map`
可以使用多种方式创建和初始化 `unordered_map`:
```cpp
#include <iostream>
#include <unordered_map>
std::unordered_map<int, std::string> umap;
umap = {{1, "one"}, {2, "two"}}; // 初始化列表
```
也可以逐个插入元素:
```cpp
umap.insert({3, "three"}); // 插入单个元素
umap.emplace(4, "four"); // 原地构造新元素
```
#### 访问元素
通过下标运算符访问已存在的键对应的值;如果该键不存在,则会自动创建一个新的默认值条目[^1]。
```cpp
std::cout << umap[1]; // 输出 "one"
// 注意:这将为不存在的键创建新的项
std::cout << umap[5]; // 输出 "" 并新增一项 (5,"")
```
为了防止意外添加不必要的条目,建议使用 `find()` 方法来安全地检索现有键的数据:
```cpp
auto it = umap.find(2);
if(it != umap.end()){
std::cout << (*it).second; // 安全输出 "two"
}
```
#### 删除元素
支持三种不同的移除方法:
- 单个指定键的删除:
```cpp
umap.erase(3); // 移除键为3的记录
```
- 迭代器指向的具体位置删除
```cpp
auto pos = umap.find(4);
if(pos != umap.end())
umap.erase(pos); // 移除迭代器pos所指的位置
```
- 范围内的多个连续节点一次性清除
```cpp
umap.clear(); // 清空整个映射
```
c++ unordered map遍历
在C++中,你可以使用范围循环(range-based for loop)来遍历`std::unordered_map`(无序映射)。下面是一个示例代码,展示了如何遍历一个`std::unordered_map`并打印出其中的键和值:
```cpp
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> myMap = {
{1, "apple"},
{2, "banana"},
{3, "orange"}
};
// 使用范围循环遍历unordered_map
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
return 0;
}
```
在这个示例中,我们创建了一个`std::unordered_map`,其中键是整数,值是字符串。然后,我们使用范围循环来遍历这个无序映射。在每次循环中,`pair`被绑定到当前键值对,并可以通过`pair.first`和`pair.second`访问键和值。我们将它们打印出来。
运行这段代码,你会得到如下输出:
```
Key: 1, Value: apple
Key: 2, Value: banana
Key: 3, Value: orange
```
这样就完成了对`std::unordered_map`的遍历。范围循环使得代码更加简洁和易读。希望这个示例对你有帮助!如果你还有其他问题,请随时提问。
阅读全文
相关推荐
















