📜  C++ STL中Multiset中的对与Multimap之间的区别(1)

📅  最后修改于: 2023-12-03 14:59:46.225000             🧑  作者: Mango

C++ STL中Multiset与Multimap的区别

在C++ STL(标准模板库)中,Multiset和Multimap是两个常用的数据结构,两者非常相似,但也有一些明显的区别,本文将对这些区别进行介绍。

Multiset和Multimap是什么?
  • Multiset是用于存储多个元素的数据结构,其中每个元素按照一定的顺序(默认为升序)存储。Multiset中允许有重复的元素。
  • Multimap是用于存储由键和值组成的多个元素的数据结构。键和值可以重复,但键是不允许重复的。Multimap中的元素按照键的大小(默认为升序)存储。
Multiset和Multimap的区别
  1. 存储方式

Multiset中只存储元素值,而Multimap中存储的是键值对。Multimap需要额外存储键值对,因此存储空间会比Multiset大。

  1. 元素的唯一性

Multiset中可存储重复元素,即Multiset中的元素可以重复。而Multimap中的键是唯一的,值可以重复。这意味着Multiset中的元素是无序的,而Multimap中的元素是按键排序的。

  1. 查找元素

Multiset中可以使用STL中的find函数来查找元素,因为Multiset中没有键值对的概念,只能通过元素的值进行查找。而在Multimap中,我们可以使用STL中的find函数来查找键,但是要查找键值对需要使用双关键字查找。

示例代码
#include <iostream>
#include <set>
#include <map>

using namespace std;

int main()
{
    // Multiset示例代码
    multiset<int> s;
    s.insert(1);
    s.insert(3);
    s.insert(3);
    s.insert(2);
    s.insert(2);
    s.insert(2);

    cout << "Multiset中的元素:";
    for (auto i : s)
    {
        cout << i << " ";
    }
    cout << endl;

    // Multimap示例代码
    multimap<int, string> m;
    m.insert(pair<int, string>(1, "apple"));
    m.insert(pair<int, string>(5, "banana"));
    m.insert(pair<int, string>(2, "orange"));
    m.insert(pair<int, string>(2, "peach"));
    m.insert(pair<int, string>(3, "pear"));

    cout << "Multimap中的元素:";
    for (auto i : m)
    {
        cout << "(" << i.first << ", " << i.second << ") ";
    }
    cout << endl;

    return 0;
}

输出结果如下:

Multiset中的元素:1 2 2 2 3 3
Multimap中的元素:(1, apple) (2, orange) (2, peach) (3, pear) (5, banana)
总结
  • Multiset用于存储多个元素,Multimap用于存储由键和值组成的多个元素。
  • Multiset中元素可以重复,而Multimap中键是唯一的。
  • 在Multiset中可以使用STL的find函数直接查找元素,而在Multimap中需要使用双关键字查找。