✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「C/C++」C/C++程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
目录
- std::multiset容器详解
- 1. 引用头文件
- 2. 注意事项
- 3. 函数构造与对象初始化
- 4. 元素访问
- 5. 迭代器
- 6. 容器修改器
- 7. 元素比较
- 总结与应用场景
std::multiset容器详解
1. 引用头文件
在使用std::multiset容器之前,需要包含相应的头文件<set>
。std::multiset是C++标准模板库(STL)中的一种关联容器,用于存储有序的元素,并允许重复元素的存在。
#include <set>
2. 注意事项
std::multiset
容器中的元素是有序的,根据元素的键值自动进行排序。std::multiset
允许存储重复的元素,这是与std::set的主要区别。std::multiset
中的元素不能直接修改,只能先删除原来的元素,然后插入新元素。std::multiset
的内部实现通常基于红黑树,因此元素的搜索、插入和删除操作都具有对数级的时间复杂度。
3. 函数构造与对象初始化
std::multiset提供了多种构造函数,可以创建空的容器,也可以使用初始化列表、其他容器的迭代器范围等进行初始化。
// 默认构造创建一个空的int类型的multiset
std::multiset<int> myMultiset;
// 使用初始化列表创建multiset
std::multiset<std::string> myStringMultiset = {"apple", "banana", "orange"};
std::vector<int> vec = {1, 2, 2, 3, 4};
// 使用vector的元素初始化multiset
std::multiset<int> myMultisetFromVec(vec.begin(), vec.end());
4. 元素访问
std::multiset不支持使用下标位置直接访问元素,也不支持将元素插入到指定位置。但是可以使用find函数查找特定元素,使用count函数返回特定元素的数量。
std::multiset<int> myMultiset = {5, 10, 15, 20, 25, 20};
auto it = myMultiset.find(20);
if (it != myMultiset.end()) {
std::cout << "Element found in multiset: " << *it << std::endl;
}
size_t count = myMultiset.count(20);
std::cout << "Count of 20: " << count << std::endl;
5. 迭代器
std::multiset提供了迭代器,用于遍历容器中的元素。迭代器支持前向遍历,也提供了反向迭代器(rbegin和rend),用于反向遍历。
std::multiset<int> myMultiset = {5, 10, 15, 20, 25, 20};
for (auto it = myMultiset.begin(); it != myMultiset.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
for (auto it = myMultiset.rbegin(); it != myMultiset.rend(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
6. 容器修改器
std::multiset提供了多种修改器函数,用于插入、删除和清空容器中的元素。
std::multiset<int> myMultiset = {5, 10, 15, 20, 25, 20};
myMultiset.insert(12); // 插入新元素
myMultiset.erase(15); // 删除指定元素
myMultiset.clear(); // 清空所有元素
7. 元素比较
std::multiset中的元素会根据指定的比较函数进行排序,默认是升序。可以通过指定比较函数来改变排序规则。
std::multiset<int, std::greater<int>> myMultisetDesc; // 创建一个降序排列的multiset
myMultisetDesc.insert(5);
myMultisetDesc.insert(10);
myMultisetDesc.insert(15);
for (auto it = myMultisetDesc.begin(); it != myMultisetDesc.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
总结与应用场景
std::multiset是C++ STL中一个非常有用的容器,具有自动排序、允许重复元素以及快速插入和查找等特点。其内部实现基于红黑树,保证了高效的查找、插入和删除操作。std::multiset适用于需要维护元素顺序且需要存储重复元素的场景。
- 需要存储有序且允许重复元素的集合。
- 需要高效查找、插入和删除操作的场景。
- 需要对元素进行排序和范围查询的场景。
例如,在处理学生成绩时,可以使用std::multiset来存储学生的分数,并方便地进行排序、查找和范围查询等操作。