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
解释:
在上面的程序中,我们创建了一组整数和字符串的 成对 ,这些名称与每个整数配对,并插入到 多重集合 中。根据多重集的默认行为,根据 第一个元素 的 升序 排列数据,但是当第一个元素 相同时 ,它将按照 第二个值 将那些元素排列。对于以上成对(3,“vijay”)和(3,“vinay”),成对中的第一个元素 即3 对于 “vijay” 和 “vinay” 都是相同的,因此它将根据第二个元素 “vijay” 和 “vinay” (按字母顺序)对这些成对进行排列。
程序 2: 在multi-map 中的Pair
输出:
上述代码解释:
在上面的程序中,我们将 相同的成对 再次 插入 到 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的时间复杂度是不确定的。 |