📌  相关文章
📜  unordered_multiset及其用法(1)

📅  最后修改于: 2023-12-03 15:05:45.985000             🧑  作者: Mango

unordered_multiset及其用法介绍

1. 什么是unordered_multiset?

unordered_multiset是C++11中提供的关联式容器,它的实现方式是哈希表,可以存储无序的大量的相同元素(允许重复元素存在)。

2. unordered_multiset的定义和初始化

unordered_multiset的定义和初始化与其他STL容器类似,可以通过以下方式进行定义和初始化。

#include <unordered_set>// 头文件
using namespace std;

unordered_multiset<int> myset;
unordered_multiset<int> myset2 = {1,2,3,4};
3. unordered_multiset的常用操作

unordered_multiset使用哈希表来实现,因此它具有常数时间复杂度的插入、查找和删除操作,以下是几个它的常用操作。

3.1 插入操作

unordered_multiset支持insert()函数和emplace()函数来实现元素的插入,它们的区别在于insert()函数需要向unordered_multiset容器中传递已经定义好的元素,而emplace()函数是通过类型推断在unordered_multiset容器中自动构造一个元素。

// 将一个元素插入到myset中
myset.insert(10);

// 通过类型推断自动构造一个元素插入到myset中
myset.emplace(20);
3.2 删除操作

unordered_multiset支持erase()函数来删除unordered_multiset容器中的元素,它的参数可以是一个迭代器指针或者是一个元素值,erase()函数会删除所有等于该元素值的元素。

// 删除myset中全部等于10的元素
myset.erase(10);

// 删除myset中指针p所指向的元素
auto p = myset.find(20);
myset.erase(p);
3.3 查找操作

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;
4. 实例

以下是使用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;
}
5. 总结

unordered_multiset是C++11中提供的一种关联式容器,它具有常数时间复杂度的插入、查找和删除操作。unordered_multiset中允许存在重复元素,它采用哈希表来实现。使用unordered_multiset可以实现存储和查询大量重复元素的需求。