在C++ STL中的multimap rbegin
什么是multimap
multimap是C++ STL中的一个关联式容器,它允许我们将一个键映射到多个值上。与map不同的是,multimap中允许同一个键值对应多个值。
multimap的特点:
– 支持key和value的类型分别可以不同;
– 内部采用红黑树实现,因此排序和查找的效率很高;
– 插入数据的时间复杂度为O(logN);
– 有两个迭代器类型:iterator和const_iterator,它们支持随机访问、修改值、插入值和删除值等操作。
下面我们来看一下multimap的定义和基本操作:
#include <iostream>
#include <map>
using namespace std;
int main()
{
multimap<int, string> myMap;
myMap.insert(pair<int, string>(1, "Tom"));
myMap.insert(pair<int, string>(2, "Jerry"));
myMap.insert(pair<int, string>(1, "Mick"));
for(auto it = myMap.begin(); it != myMap.end(); ++it){
cout << it->first << " : " << it->second << endl;
}
return 0;
}
输出结果:
1 : Tom
1 : Mick
2 : Jerry
multimap的反向迭代器rbegin
multimap有一个反向迭代器rbegin,它是从大到小遍历multimap中的所有元素,从而实现反向遍历。注意,multimap中存储的元素是按照键值排序的,默认情况下是按照从小到大的顺序排列。
#include <iostream>
#include <map>
using namespace std;
int main()
{
multimap<int, string> myMap;
myMap.insert(pair<int, string>(1, "Tom"));
myMap.insert(pair<int, string>(3, "Jerry"));
myMap.insert(pair<int, string>(2, "Mick"));
for(auto it = myMap.rbegin(); it != myMap.rend(); ++it){
cout << it->first << " : " << it->second << endl;
}
return 0;
}
输出结果:
3 : Jerry
2 : Mick
1 : Tom
rbegin的应用
获取multimap中键值最大的元素
我们可以使用rbegin()获取multimap中键值最大的元素,例如:
multimap<int, string> myMap;
myMap.insert(pair<int, string>(1, "Tom"));
myMap.insert(pair<int, string>(3, "Jerry"));
myMap.insert(pair<int, string>(2, "Mick"));
cout << myMap.rbegin()->first << endl;
输出结果:
3
从multimap中删除键值最大的元素
我们也可以使用rbegin()获取multimap中键值最大的元素,并且使用erase()函数将其从multimap中删除。例如:
multimap<int, string> myMap;
myMap.insert(pair<int, string>(1, "Tom"));
myMap.insert(pair<int, string>(3, "Jerry"));
myMap.insert(pair<int, string>(2, "Mick"));
myMap.erase(--myMap.end());
for(auto it = myMap.begin(); it != myMap.end(); ++it){
cout << it->first << " : " << it->second << endl;
}
输出结果:
1 : Tom
2 : Mick
结论
multimap的rbegin()函数是一个非常有用的函数,它可以让我们从大到小遍历multimap中的所有元素,并且允许我们获取multimap中键值最大的元素和从multimap中删除键值最大的元素。