unordered_multimap从迭代器中取值
时间: 2023-06-28 07:16:16 浏览: 81
要从`unordered_multimap`中的迭代器中取值,可以使用`->`或`*`运算符。例如,假设`umap`是一个`unordered_multimap<int, string>`类型的容器,`it`是指向某个元素的迭代器,可以使用以下方式从迭代器中取值:
使用`->`运算符:
```c++
cout << it->first << ": " << it->second << endl;
```
使用`*`运算符:
```c++
cout << (*it).first << ": " << (*it).second << endl;
```
这两种方式都可以从迭代器中获取键和值。`->`运算符用来访问迭代器所指向元素的成员变量,`*`运算符用来解引用迭代器获取所指向的元素。
相关问题
unordered_multiset,unordered_set,unordered_multimap,unordered_map,set,map,multiset,multimap的区别和特点 unordered_multiset,unordered_set,unordered_multimap,unordered_map,set,map,multiset,multimap的区别和特点
这些容器都是C++ STL(标准模板库)中的关联容器,用于存储和管理键值对数据。它们的区别和特点如下:
1. unordered_multiset和unordered_set:
- 无序容器,使用哈希表实现。
- unordered_multiset允许重复的元素,而unordered_set不允许。
- 插入、查找和删除的平均时间复杂度为常数时间(O(1))。
- 元素的顺序是无序的,不会根据插入顺序或键值排序。
2. unordered_multimap和unordered_map:
- 无序容器,使用哈希表实现。
- unordered_multimap允许键重复,而unordered_map不允许。
- 插入、查找和删除的平均时间复杂度为常数时间(O(1))。
- 元素的顺序是无序的,不会根据插入顺序或键值排序。
3. set和map:
- 有序容器,使用红黑树实现。
- set中存储唯一的键,map中存储键值对。
- 插入、查找和删除的平均时间复杂度为对数时间(O(log n))。
- 元素的顺序是按照键值排序的。
4. multiset和multimap:
- 有序容器,使用红黑树实现。
- 允许重复的键。
- 插入、查找和删除的平均时间复杂度为对数时间(O(log n))。
- 元素的顺序是按照键值排序的。
总结:unordered容器提供了更快的插入、查找和删除操作,但不保证元素顺序;而有序容器保证元素按照键值有序存储,但操作速度相对较慢。选择使用哪个容器取决于具体的需求。
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()`函数返回指向第一个元素之前的反向迭代器。需要使用反向迭代器遍历时,同样需要使用`++`运算符将迭代器指向前一个元素。
阅读全文