C++ STL中Multiset和Multimap的区别

C++ STL中Multiset和Multimap的区别

C++中的对子。对容器是 <utility> 头中定义的一个简单容器,由两个数据元素或对象组成。第一个元素被称为 “第一”,第二个元素被称为 “第二”,其顺序是固定的(第一,第二)。Pair被用来将两个类型可能不同的值组合在一起。 Pair 提供了一种将两个异质对象作为一个单元来存储的方法。

语法:

pair (data_type1, data_type2) Pair_name;

C++中的 multiset 是一种关联容器,它按照特定的顺序存储元素,并且多个元素可以有相同的值。

语法:

multiset <data_type> Multiset_name;

Multimap: Multimap是一种关联容器,它与 map 类似,但有一个例外,即多个元素可以有相同的键。

语法:

multimap <data_type1, data_type2> Multimap_name

C++ STL中多集和多映射中的对有什么区别?

multiset和multimap这两种数据结构的默认行为都是以升序来存储元素。当一对多集被创建时,默认情况下,它将根据所有对的第一个元素以递增的顺序对所有对进行排序,如果任何两个或两个以上的对的第一个元素相等,那么它将根据对的第二个元素对其进行排序。

当一对多映射被创建时,默认情况下,它将根据所有对的第一个元素以递增的顺序对所有对进行排序,如果任何两个或两个以上的对的第一个元素相等,那么它将根据插入的顺序将对打印到多图的对。

下面的程序说明了这一区别 –

// C++ program print the data of
// multiset by inserting using pair
#include <bits/stdc++.h>
using namespace std;

// Function to print the data stored in pair of multiset
void printData(multiset<pair<int, string> > gfg)
{

    // Declare iterator
    multiset<pair<int, string> >::iterator i;

    // Iterate through pair of multiset
    for (i = gfg.begin(); i != gfg.end(); ++i) {
        // Print the pairs
        cout << i->first << " " << i->second << endl;
    }
}

// Driver Code
int main()
{
    // Declare pair of multiset
    multiset<pair<int, string> > sets;

    // Insert Data
    sets.insert(make_pair(1, "yukti"));
    sets.insert(make_pair(2, "umang"));
    sets.insert(make_pair(3, "vinay"));
    sets.insert(make_pair(3, "vijay"));
    sets.insert(make_pair(4, "kanak"));

    // Function call to print the data
    printData(sets);
    return 0;
}

解释一下:
在上面的程序中,我们已经创建了整数和字符串对,其中名称与每个整数配对,并插入到多集合中。根据多重集的默认行为,数据按照第一元素的升序排列,但当第一元素相同时,它将按照第二值排列这些元素。对于 (3, "vijay")(3, "vinay") 这对数据, "vijay""vinay" 的第一个元素是相同的,所以它将根据第二个元素 "vijay""vinay" 来安排这些数据(按字母顺序)。

程序2:多映射中的配对

// C++ program print the data of multimap by inserting using pair
#include <bits/stdc++.h>
using namespace std;

// Function to print the data stored in pair of multimap
void printData(multimap<int, string> gfg)
{

    // Declare iterator
    multimap<int, string>::iterator i;

    // Iterate through pair of multiset
    for (i = gfg.begin(); i != gfg.end(); ++i) {

        // Print the pairs
        cout << i->first << " " << i->second << endl;
    }
}

// Driver Code
int main()
{
    // Declare pair of multimap
    multimap<int, string> sets;

    // Insert data
    sets.insert(make_pair(1, "yukti"));
    sets.insert(make_pair(2, "umang"));
    sets.insert(make_pair(3, "vinay"));
    sets.insert(make_pair(3, "vijay"));
    sets.insert(make_pair(4, "kanak"));

    // Function call to print the data
    printData(sets);

    return 0;
}

运行结果:

1 yukti
2 umang
3 vinay
3 vijay
4 kanak

上述代码的解释 –
在上面的程序中,我们再次插入了相同的对,但这次是在多映射中。根据 multi-map 的默认行为,数据是按照键的升序排列的,但是当键相同时,与 multi-set 不同,它将看到哪个元素先被插入的优先权,然后它将按照这个顺序排列。因此,在所示的输出中,可以看到,由于 "vinay""vijay" 的键3是相同的,所以它将遵循在多图中插入配对的顺序,这就是为什么在输出中 "vinay" 先于 "vijay" 出现。

多数据集中的配对 多映射
在多数据集的对中,对被用来将键与特定的值映射。 默认行为是将元素作为一个键值对插入。
当一个多集的对被创建时,默认情况下,它将根据所有对的第一个元素以递增的顺序排序,如果任何两个或两个以上的对的第一个元素相等,那么它将根据对的第二个元素排序。 当创建一个多图对时,默认情况下,它将根据所有对的第一个元素以递增的顺序对所有对进行排序,如果任何两个或两个以上的对的第一个元素相等,那么它将根据插入多图对的顺序来打印该对。
语法: multiset<pair<int, string> > M; 语法: multimap<int, string> M;
在Multiset中插入一对的时间复杂度是O(log N) 在Multimap中插入一对的时间复杂度是O(log N)
在Multiset中删除配对的时间复杂度是O(N) 在Multimap中删除配对的时间复杂度是不同的,没有指定。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程