unordered_multimap 用法
时间: 2024-04-26 22:18:18 浏览: 14
unordered_multimap是C++标准库中的一个关联容器,它提供了存储键-值对的功能,其中键可以重复。unordered_multimap使用哈希表实现,因此插入、查找和删除操作的平均时间复杂度都是常数时间。
以下是unordered_multimap的一些常用用法:
1. 插入元素:可以使用insert()函数插入键-值对,也可以使用emplace()函数在容器中直接构造对象。
2. 删除元素:可以使用erase()函数按键删除元素,也可以使用clear()函数删除所有元素。
3. 访问元素:可以使用find()函数按键查找元素,也可以使用at()函数按键访问元素。
4. 迭代器遍历:可以使用begin()和end()函数获取迭代器进行遍历。
5. 获取元素个数:可以使用size()函数获取元素的个数。
6. 判断元素是否存在:可以使用count()函数判断某个键是否存在,返回值为0表示不存在,非0表示存在。
相关问题
c++ unordered_multimap
C++中的`unordered_multimap`是一种关联容器,它可以存储键-值对,并根据键快速查找值。与`multimap`不同的是,`unordered_multimap`不会对键进行排序,而是使用哈希函数将键映射到存储桶中。这使得在平均情况下,插入、查找和删除操作具有常数时间复杂度。
以下是`unordered_multimap`的一些特点:
- 允许重复的键。
- 提供快速的插入、查找和删除操作。
- 内部使用哈希表实现,具有较好的性能。
- 不保持元素的顺序。
- 支持迭代器遍历。
要使用`unordered_multimap`,需要包含头文件`<unordered_map>`并使用命名空间`std`。以下是一个示例代码片段:
```cpp
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_multimap<int, std::string> myMap;
// 插入键-值对
myMap.insert({1, "apple"});
myMap.insert({2, "banana"});
myMap.insert({1, "orange"}); // 允许重复的键
// 遍历并打印所有元素
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
// 查找特定键的值
auto range = myMap.equal_range(1);
for (auto it = range.first; it != range.second; ++it) {
std::cout << "Value with key 1: " << it->second << std::endl;
}
// 删除特定键的所有值
myMap.erase(1);
return 0;
}
```
这是`unordered_multimap`的基本用法,你可以根据实际需求进行插入、查找和删除操作。希望能对你有所帮助!如果有任何进一步的问题,请随时问我。
unordered_multimap迭代
`unordered_multimap`是不保证元素顺序的容器,因此使用迭代器遍历元素时不一定能够按照插入顺序遍历,但可以保证元素不会重复。要使用迭代器遍历`unordered_multimap`中的元素,可以使用以下方法:
```c++
unordered_multimap<int, string> umap = {{1, "one"}, {2, "two"}, {3, "three"}};
// 使用 auto 关键字定义迭代器类型
for (auto it = umap.begin(); it != umap.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
```
这里使用`auto`关键字定义迭代器类型,可以自动推导出正确的类型。`begin()`函数返回指向第一个元素的迭代器,`end()`函数返回指向最后一个元素之后的迭代器。在遍历时,需要使用`++`运算符将迭代器指向下一个元素。
如果需要逆序遍历`unordered_multimap`中的元素,则可以使用`rbegin()`和`rend()`函数:
```c++
for (auto it = umap.rbegin(); it != umap.rend(); ++it) {
cout << it->first << ": " << it->second << endl;
}
```
这里的`rbegin()`函数返回指向最后一个元素的反向迭代器,`rend()`函数返回指向第一个元素之前的反向迭代器。需要使用反向迭代器遍历时,同样需要使用`++`运算符将迭代器指向前一个元素。