📅  最后修改于: 2023-12-03 14:59:46.247000             🧑  作者: Mango
在C++的STL库中,Multiset和Multimap是两个非常有用的容器。它们都可以存储多个相同类型的元素,但它们之间的主要区别在于元素的存储和组织方式。
Multiset是一个容器,类似于Set,但允许存储重复的元素。它使用红黑树来组织和存储元素,具备以下特点:
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也是一个容器,类似于Map,但允许存储具有相同键的多个键值对。它使用红黑树来组织和存储键值对,具备以下特点:
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
在Multiset和Multimap中,pair是一个非常重要的数据结构。它用于存储两个不同类型的元素,例如Multimap中的键值对就是由一个pair组成的。pair的特点有:
std::make_pair
函数或直接使用花括号初始化列表创建一个pair对象。first
和second
成员变量分别访问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