📅  最后修改于: 2023-12-03 15:05:45.985000             🧑  作者: Mango
unordered_multiset是C++11中提供的关联式容器,它的实现方式是哈希表,可以存储无序的大量的相同元素(允许重复元素存在)。
unordered_multiset的定义和初始化与其他STL容器类似,可以通过以下方式进行定义和初始化。
#include <unordered_set>// 头文件
using namespace std;
unordered_multiset<int> myset;
unordered_multiset<int> myset2 = {1,2,3,4};
unordered_multiset使用哈希表来实现,因此它具有常数时间复杂度的插入、查找和删除操作,以下是几个它的常用操作。
unordered_multiset支持insert()函数和emplace()函数来实现元素的插入,它们的区别在于insert()函数需要向unordered_multiset容器中传递已经定义好的元素,而emplace()函数是通过类型推断在unordered_multiset容器中自动构造一个元素。
// 将一个元素插入到myset中
myset.insert(10);
// 通过类型推断自动构造一个元素插入到myset中
myset.emplace(20);
unordered_multiset支持erase()函数来删除unordered_multiset容器中的元素,它的参数可以是一个迭代器指针或者是一个元素值,erase()函数会删除所有等于该元素值的元素。
// 删除myset中全部等于10的元素
myset.erase(10);
// 删除myset中指针p所指向的元素
auto p = myset.find(20);
myset.erase(p);
unordered_multiset支持find()函数来查找unordered_multiset容器中的元素,如果找到,则返回该元素的迭代器指针,否则返回尾迭代器。count()函数用来查找指定元素在unordered_multiset容器中出现的次数。
// 查找myset中是否存在等于20的元素
auto p = myset.find(20);
if(p != myset.end())
cout<<"元素存在"<<endl;
else
cout<<"元素不存在"<<endl;
// 查找myset中等于30的元素个数
int n = myset.count(30);
cout<<"出现次数为: "<<n<<endl;
以下是使用unordered_multiset的一个示例,它展示了如何使用unordered_multiset实现大量重复元素的存储和查询操作。
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
unordered_multiset<int> myset = {5,5,5,5,5,5,2,2,2,2,7,7,7,7,7,7};
// 输出unordered_set中的元素个数
cout<<"元素个数: "<<myset.size()<<endl;
// 输出unordered_set中所有元素
cout<<"所有元素: ";
for(auto v: myset)
cout<<v<<" ";
cout<<endl;
// 将元素8插入到unordered_set中
myset.insert(8);
// 删除元素2
auto p = myset.find(2);
myset.erase(p);
// 查找元素5在unordered_set中出现的次数
int n = myset.count(5);
cout<<"元素5的数量: "<<n<<endl;
// 查找元素30是否在unordered_set中存在
p = myset.find(30);
if(p != myset.end())
cout<<"元素存在"<<endl;
else
cout<<"元素不存在"<<endl;
return 0;
}
unordered_multiset是C++11中提供的一种关联式容器,它具有常数时间复杂度的插入、查找和删除操作。unordered_multiset中允许存在重复元素,它采用哈希表来实现。使用unordered_multiset可以实现存储和查询大量重复元素的需求。