📜  C++ STL中Multiset和Multimap中的pair之间的区别(1)

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

C++ STL中Multiset和Multimap中的pair之间的区别

在C++的STL库中,Multiset和Multimap是两个非常有用的容器。它们都可以存储多个相同类型的元素,但它们之间的主要区别在于元素的存储和组织方式。

Multiset

Multiset是一个容器,类似于Set,但允许存储重复的元素。它使用红黑树来组织和存储元素,具备以下特点:

  • 允许存储重复的元素,且不要求元素排序。
  • 元素的插入和删除操作的平均时间复杂度为O(log n)。
  • 可以使用迭代器遍历元素,并进行顺序访问。

Multiset通常用于需要存储一组元素,并且允许重复的情况,例如统计一组数据中每个元素出现的次数。

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

int main() {
   std::multiset<int> myMultiset;
   
   myMultiset.insert(10);
   myMultiset.insert(20);
   myMultiset.insert(10);
   myMultiset.insert(30);
   
   // 遍历输出multiset中的元素
   for (const auto& element : myMultiset) {
      std::cout << element << " ";
   }
   
   return 0;
}

输出结果:10 10 20 30

Multimap

Multimap也是一个容器,类似于Map,但允许存储具有相同键的多个键值对。它使用红黑树来组织和存储键值对,具备以下特点:

  • 允许存储具有相同键的多个键值对,且不要求键的排序。
  • 键和值之间的映射关系可以通过键来查找。
  • 元素的插入和删除操作的平均时间复杂度为O(log n)。
  • 可以使用迭代器遍历元素,并进行顺序访问。

Multimap通常用于需要存储一组具有相同键的键值对,例如存储多个学生的成绩。

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

int main() {
   std::multimap<int, std::string> myMultimap;
   
   myMultimap.insert(std::make_pair(1, "Alice"));
   myMultimap.insert(std::make_pair(2, "Bob"));
   myMultimap.insert(std::make_pair(1, "Charlie"));
   myMultimap.insert(std::make_pair(3, "David"));
   
   // 遍历输出multimap中的元素
   for (const auto& element : myMultimap) {
      std::cout << element.first << ": " << element.second << std::endl;
   }
   
   return 0;
}

输出结果:

1: Alice
1: Charlie
2: Bob
3: David
Pair

在Multiset和Multimap中,pair是一个非常重要的数据结构。它用于存储两个不同类型的元素,例如Multimap中的键值对就是由一个pair组成的。pair的特点有:

  • 可以通过std::make_pair函数或直接使用花括号初始化列表创建一个pair对象。
  • 可以使用firstsecond成员变量分别访问pair中的两个元素。

Pair通常用于需要存储两个相关联的元素,例如键值对、坐标等。

示例代码
#include <iostream>
#include <utility>

int main() {
   std::pair<int, double> myPair1 = std::make_pair(1, 3.14);
   std::pair<std::string, int> myPair2("Alice", 18);
   
   std::cout << myPair1.first << ": " << myPair1.second << std::endl;
   std::cout << myPair2.first << ": " << myPair2.second << std::endl;
   
   return 0;
}

输出结果:

1: 3.14
Alice: 18
总结
  • Multiset和Multimap都是存储多个元素的容器,其中Multiset允许存储重复的元素,而Multimap允许存储具有相同键的多个键值对。
  • Multiset使用红黑树来组织和存储元素,Multimap使用红黑树来组织和存储键值对。
  • Pair是用于存储两个不同类型元素的数据结构,可用于Multimap中的键值对等场景。