在 C++ 语言 的 标准模板库 ( STL , Standard Template Library ) 中 , 提供了 std::multiset 容器 ,
向 std::multiset 容器 中 插入元素时 , 不需要验证集合中是否已经存在该元素 , 直接根据排序规则 , 插入到指定的位置 ;
std::multiset 容器 不支持 将 元素插入到指定位置 ;
std::multiset 容器 也不支持 使用 下标位置 直接访问元素 ;
使用 std::multiset 容器前 , 需要 导入 set 头文件 ;
#include "set"
与 set 容器类似的 容器还有 multiset 容器 , 唯一区别是 set 中的元素只能出现一次 , multiset 中的元素可以出现多次 ;
std::multiset 容器 中的元素 不能直接修改 , 只能 先删除 原来的元素 , 然后插入新元素 ;
在下面的代码中 , 创建了一个 multiset 容器 , 存储重复的元素 ;
multiset<int> myMultiSet = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
上述容器初始化时 , 会自动对容器中的元素进行排序 , 排序后的顺序如下 :
1 1 2 2 3 3 4 4 5
代码示例 :
#include "iostream"
using namespace std;
#include "set"
int main() {
// 初始化 multiset 容器
multiset<int> myMultiSet = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
// 遍历打印 multiset 中的所有元素
for (auto& elem : myMultiSet) {
cout << elem << " ";
}
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
1 1 2 2 3 3 4 4 5
请按任意键继续. . .
std::multiset 容器 常用操作 : std::multiset 容器 与 std::set 容器 操作 的 接口基本相同 ;
代码示例 :
#include "iostream"
using namespace std;
#include "set"
void printMS(multiset<int>& ms) {
// 遍历打印 multiset 中的所有元素
for (auto& elem : ms) {
cout << elem << " ";
}
cout << endl;
}
int main() {
// 初始化 multiset 容器
multiset<int> myMultiSet = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
// 遍历打印容器
printMS(myMultiSet);
// 插入元素
myMultiSet.insert(9);
// 遍历打印容器
cout << "插入元素 9 : ";
printMS(myMultiSet);
// 删除元素
myMultiSet.erase(3);
// 遍历打印容器
cout << "删除元素 3 : ";
printMS(myMultiSet);
// 获取元素数量
int count = myMultiSet.count(2);
// 遍历打印容器
cout << "元素 2 个数 : " << count << endl;
printMS(myMultiSet);
// 清空元素
myMultiSet.clear();
// 遍历打印容器
cout << "清空元素 : ";
printMS(myMultiSet);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
1 1 2 2 3 3 4 4 5
插入元素 9 : 1 1 2 2 3 3 4 4 5 9
删除元素 3 : 1 1 2 2 4 4 5 9
元素 2 个数 : 2
1 1 2 2 4 4 5 9
清空元素 :
请按任意键继续. . .