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

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

Pairs in C++: pair容器是一个简单的容器,定义在”utility”头文件中,由两个数据元素或对象组成。第一个元素被称为“第一(first)”,第二个元素被称为“第二(second)”,顺序固定(first, second)。Pair可以用于将两个可能不同类型的值组合在一起。Pair提供一种将两个异构对象作为单个单位存储的方法。

语法:

pair(data_type1,data_type2) Pair_name;

Multiset in C++: Multiset是一种关联容器类型,按照特定顺序存储元素,多个元素可以有相同的值。

语法:

multiset <data_type> Multiset_name;

Multimap: Multimap是一种关联容器类型,与map相似,但不同之处在于多个元素可以具有相同的键。

语法:

multimap <data_type1,data_type2> Multimap_name

C++ STL中Multiset和Multimap中Pair的区别是什么呢?

这两种数据结构Multiset和Multimap的默认行为都是按升序存储元素。当创建Multiset的Pair时,它将默认按所有Pair的第一个元素对所有Pair的Pair进行升序排序。如果两个或多个Pair的第一个元素相等,则Pair将按Pair的第二个元素进行排序。

当创建Multimap的Pair时,默认情况下,它将按先进先出的顺序按所有Pair的第一个元素对所有Pair的Pair进行升序排序。

以下是说明差异的程序:

程序1: Multiset中的Pair

// 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> > gfg;
 
    // Insert Data
    gfg.insert(make_pair(1, "yukti"));
    gfg.insert(make_pair(2, "umang"));
    gfg.insert(make_pair(3, "vinay"));
    gfg.insert(make_pair(3, "vijay"));
    gfg.insert(make_pair(4, "kanak"));
 
    // Function call to print the data
    printData(gfg);
    return 0;
}  

解释:

在上面的程序中,我们创建了一组整数和字符串的 成对 ,这些名称与每个整数配对,并插入到 多重集合 中。根据多重集的默认行为,根据 第一个元素升序 排列数据,但是当第一个元素 相同时 ,它将按照 第二个值 将那些元素排列。对于以上成对(3,“vijay”)和(3,“vinay”),成对中的第一个元素 即3 对于 “vijay”“vinay” 都是相同的,因此它将根据第二个元素 “vijay”“vinay” (按字母顺序)对这些成对进行排列。

程序 2: 在multi-map 中的Pair

// 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> gfg;
 
    // Insert data
    gfg.insert(make_pair(1, "yukti"));
    gfg.insert(make_pair(2, "umang"));
    gfg.insert(make_pair(3, "vinay"));
    gfg.insert(make_pair(3, "vijay"));
    gfg.insert(make_pair(4, "kanak"));
 
    // Function call to print the data
    printData(gfg);
 
    return 0;
}  

输出:

1 yukti
2 umang
3 vinay
3 vijay
4 kanak

上述代码解释:

在上面的程序中,我们将 相同的成对 再次 插入Multi-map 中。根据 多映射 的默认行为,根据 的升序排列数据,但是当键 相同时 ,与 多重集合 不同,它将看到首先 插入 的元素的 优先级 ,然后按照该顺序进行排列。因此,正如输出所示,我们可以看到由于 “vinay”“vijay” 的键相同,因此它将按照在 multi-map 中插入 成对 的顺序,因此 “vinay” 在输出之前先出现于 “vijay” 之前。

表格分化:

多重集合中的pair 多重映射
在多重集合中,pair被用于将键与特定值进行映射。 默认行为是将元素作为键值对插入。
当创建多重集合中的一对pair时,默认情况下,它将按照所有pair的第一个元素的递增顺序对所有pair进行排序,如果任意两个或多个pair的第一个元素相等,则它将按照pair的第二个元素对pair进行排序。 当创建多重映射中的一对pair时,默认情况下,它将按照所有pair的第一个元素的递增顺序对所有pair进行排序,如果任意两个或多个pair的第一个元素相等,则按照插入到多重映射对pair的顺序来打印pair。
语法:multiset<pair<int, string> > M; 语法: multimap<int, string> M;
在Multiset中插入pair的时间复杂度是O(logN) 在Multimap中插入pair的时间复杂度是O(logN)
在Multiset中删除pair的时间复杂度是O(N) 在Multimap中删除pair的时间复杂度是不确定的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程