在C++标准模板库(STL)中,multiset 是一个非常实用的关联容器。它和 set 类似,但允许存储重复元素。本教程将从基础概念到实际应用,详细讲解 C++ multiset详解、multiset用法、以及如何高效使用这个强大的 C++ STL容器。

multiset 是 C++ STL 中的一个有序关联容器,它以红黑树(Red-Black Tree)为底层实现,自动对元素进行排序,并且 允许多个相同值的元素存在。这与 set 容器不同,后者不允许重复。
由于其自动排序和高效查找特性,multiset 非常适合需要频繁插入、删除和查找重复数据的场景。
要使用 multiset,你需要包含 <set> 头文件:
#include <set>using namespace std;声明一个 multiset 的语法如下:
multiset<int> ms; // 存储整数的 multisetmultiset<string> words; // 存储字符串的 multiset使用 insert() 方法可以向 multiset 中添加元素。即使元素已存在,也会被再次插入。
#include <iostream>#include <set>using namespace std;int main() { multiset<int> ms; ms.insert(10); ms.insert(20); ms.insert(10); // 允许重复 ms.insert(30); for (int x : ms) { cout << x << " "; // 输出:10 10 20 30 } return 0;}multiset 提供了多种删除方式:
erase(value):删除所有等于 value 的元素。erase(iterator):删除迭代器指向的单个元素。ms.erase(10); // 删除所有值为10的元素auto it = ms.find(20);if (it != ms.end()) { ms.erase(it); // 只删除一个20}由于允许重复,multiset 的查找通常配合 count() 使用:
cout << "10 出现了 " << ms.count(10) << " 次" << endl;auto it = ms.find(20);if (it != ms.end()) { cout << "找到了 20" << endl;}equal_range(value) 返回一对迭代器,表示所有等于 value 的元素范围:
auto range = ms.equal_range(10);for (auto it = range.first; it != range.second; ++it) { cout << *it << " ";}默认情况下,multiset 按升序排列。你可以通过传入比较函数来自定义排序:
struct Descending { bool operator()(int a, int b) const { return a > b; // 降序 }};multiset<int, Descending> ms_desc;ms_desc.insert(10);ms_desc.insert(30);ms_desc.insert(20);// 输出:30 20 10由于基于红黑树实现,multiset 的插入、删除、查找操作的时间复杂度均为 O(log n)。适用于以下场景:
掌握 multiset插入删除 等核心操作,能让你在处理复杂数据时更加得心应手。
multiset 是 C++ STL 中功能强大且高效的容器,特别适合处理需要排序且允许重复的数据。通过本教程,你应该已经掌握了它的基本用法、常用操作以及自定义排序方法。无论是初学者还是进阶开发者,理解 C++ multiset详解 都将极大提升你的编程能力。
希望这篇关于 C++ STL容器 的教程对你有所帮助!动手实践是掌握知识的关键,快去写点代码试试吧!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025128787.html