c++ unordered_map用法
时间: 2024-10-21 09:10:09 浏览: 34
`unordered_map`是C++标准库中的关联容器,它基于哈希表实现,用于存储键值对。其主要特点包括:
1. **快速查找**:由于内部使用哈希函数,对于随机访问的数据,插入、删除和查找操作的时间复杂度通常接近O(1)。
2. **无序性**:元素的存储顺序并不保证,与`map`不同,`unordered_map`不会保持键的排序。
3. **迭代器**:提供迭代器支持,可以遍历整个映射。
4. **自定义比较**:允许通过模板参数指定键或值的比较函数,例如`std::less<T>`默认用于数值类型的比较,而自定义函数则可以实现自定义排序规则。
使用`unordered_map`的基本步骤如下:
```cpp
#include <unordered_map>
// 创建一个unordered_map实例
std::unordered_map<std::string, int> myMap;
// 插入键值对
myMap["apple"] = 1;
myMap["banana"] = 2;
// 访问值
int count = myMap["apple"]; // 输出1
// 遍历
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << "\n";
}
// 删除键值对
myMap.erase("banana");
相关问题
c++哈希表unordered_set unordered_map用法
unordered_set和unordered_map都是C++ STL中的哈希表容器,它们的用法如下:
unordered_set用法:
```c++
#include <unordered_set>
using namespace std;
int main() {
unordered_set<int> s; // 定义一个空的unordered_set
s.insert(1); // 插入元素1
s.insert(2); // 插入元素2
s.insert(3); // 插入元素3
s.erase(2); // 删除元素2
if (s.find(1) != s.end()) { // 查找元素1
cout << "Found!" << endl;
}
for (auto x : s) { // 遍历unordered_set
cout << x << " ";
}
return 0;
}
```
unordered_map用法:
```c++
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> m; // 定义一个空的unordered_map
m["apple"] = 1; // 插入键值对"apple":1
m["banana"] = 2; // 插入键值对"banana":2
m["orange"] = 3; // 插入键值对"orange":3
m.erase("banana"); // 删除键为"banana"的键值对
if (m.find("apple") != m.end()) { // 查找键为"apple"的值
cout << "Found!" << endl;
}
for (auto p : m) { // 遍历unordered_map
cout << p.first << ":" << p.second << " ";
}
return 0;
}
```
c++ unordered_map 判断是否包含某个键值
判断一个 `unordered_map` 是否包含某个键值可以使用 `count()` 或者 `find()` 方法。
使用 `count()` 方法:
```c++
unordered_map<int, string> my_map = {{1, "one"}, {2, "two"}, {3, "three"}};
if (my_map.count(2)) {
cout << "my_map contains key 2" << endl;
} else {
cout << "my_map does not contain key 2" << endl;
}
```
使用 `find()` 方法:
```c++
unordered_map<int, string> my_map = {{1, "one"}, {2, "two"}, {3, "three"}};
if (my_map.find(2) != my_map.end()) {
cout << "my_map contains key 2" << endl;
} else {
cout << "my_map does not contain key 2" << endl;
}
```
在上述代码中,`count()` 方法返回一个整数值,表示键值为参数的元素出现的次数(因为 `unordered_map` 中每个键值只会出现一次,所以返回值只能是 0 或 1)。`find()` 方法返回一个指向键值为参数的元素的迭代器,如果没找到则返回 `unordered_map::end()`。
阅读全文