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中删除配对的时间复杂度是不同的,没有指定。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:C++ STL中Multiset和Multimap的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-pair-in-multiset-and-multimap-in-c-stl.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。