C++ STL中Multiset和Multimap中Pair的差异

C++ STL中Multiset和Multimap中Pair的差异

C++ STL提供了Multiset和Multimap两种容器来存储一组按照某个比较规则排序的元素,它们都是通过红黑树来实现的。两者最大的不同点在于Multimap可以存储键值相同的元素,而Multiset只能存储键值不同的元素。比如,在Multimap中,可以同时存储多个成绩为90分的学生,而在Multiset中,只能存储一个成绩为90分的学生。

对于两种容器中存储的元素,C++ STL中也提供了Pair来表示。Pair是一种结构体模板,包含两个数据成员:first和second。在Multiset中,Pair的first和second都表示同一个元素,而在Multimap中,Pair的first表示键值,second表示值。

Multiset中使用Pair

在Multiset中,Pair的first和second都表示同一个元素。例如,我们有一个Multiset来存储整型数据,我们可以这样使用Pair:

#include <iostream>
#include <set>

using namespace std;

int main()
{
    multiset<pair<int,int>> data;

    data.insert({1,2});
    data.insert({3,4});
    data.insert({1,5});

    for (auto it = data.begin(); it != data.end(); ++it)
        cout << it->first << "-" << it->second << " ";

    return 0;
}

输出结果:1-2 1-5 3-4

我们可以看到,虽然在初始化multiset时,我们加入了三个不同的Pair {1,2}、 {3,4}和 {1,5},但是程序输出的结果中,我们发现它们的值都被存储到了Multiset中。

Multimap中使用Pair

在Multimap中,Pair的first表示键值,second表示值。例如,我们有一个Multimap来存储学生的成绩,我们可以这样使用Pair:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    multimap<int,string> data;

    data.insert(make_pair(90, "Alice"));
    data.insert(make_pair(80, "Bob"));
    data.insert(make_pair(90, "Cathy"));

    for (auto it = data.begin(); it != data.end(); ++it)
        cout << it->first << "-" << it->second << " ";

    return 0;
}

输出结果:80-Bob 90-Alice 90-Cathy

我们可以看到,Multimap中可以存储键值相同的Pair {90, “Alice”}和 {90, “Cathy”}。

结论

总的来说,Multiset和Multimap都是通过红黑树来实现的。Multiset只能存储键值不同的元素,而Multimap可以存储键值相同的元素。Pair在Multiset中表示同一个元素,而在Multimap中,表示的是键值和值。在实际的使用中,我们可以根据具体需要选择使用哪种容器及其元素类型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程