在C++ STL中的multimap rbegin

在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中删除键值最大的元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程