目录
一,multiset介绍
- multiset是一个有序的、可重复的关联式容器;
- 元素会自动排序,默认升序(小于比较),即无论插入顺序如何都会自动维护元素顺序;
- 内部比较对象(compare)维护元素的排序顺序,按特定严格弱排序准则进行排序;
- 使用迭代器对multiset中的元素进行遍历,可得到有序序列;
- 与set区别是,multiset元素可重复,set是唯一的;
- 元素不可修改(元素总是const),但可快速查找、插入和删除元素;
- 查找、插入、删除时间复杂度:O(log n);
- 访问元素的速度通常比unordered_multiset容器慢,但当使用迭代器遍历时会得到一个有序序列;
- 主要应用于需有序存储且允许重复的数据,频繁的查找、插入、删除操作,需统计元素出现次数,需获取某个范围内的所有元素等;
- multiset底层结构为二叉搜索树(红黑树);
注:
- multiset中元素存储的是value,value就是key,key就是value,类型为T;
// set
插入时必须检查是否存在,返回 (iterator, bool);
// multiset
插入时不需要检查,返回 iterator;

二,multiset成员函数

构造函数

操作函数
//迭代器
iterator begin() noexcept;
const_iterator begin() const noexcept;
iterator end() noexcept;
const_iterator end() const noexcept;
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
reverse_iterator rend() nothrow;
const_reverse_iterator rend() const nothrow;
//插入
single element (1)
iterator insert (const value_type& val);
iterator insert (value_type&& val);
with hint (2)
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
range (3)
template <class InputIterator>
void insert (InputIterator first, InputIterator last);
initializer list (4)
void insert (initializer_list<value_type> il);
//删除
iterator erase (const_iterator position);
size_type erase (const value_type& val);
iterator erase (const_iterator first, const_iterator last);
//查找
const_iterator find (const value_type& val) const;
iterator find (const value_type& val);
bool empty() const noexcept;
size_type size() const noexcept;
size_type count (const value_type& val) const;
void swap (multiset& x);
void clear() noexcept;
key_compare key_comp() const;
value_compare value_comp() const;
const_iterator lower_bound (const value_type& val) const;
iterator lower_bound (const value_type& val);
const_iterator upper_bound (const value_type& val) const;
iterator upper_bound (const value_type& val);
pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);
int main()
{
int arr[] = { 5,3,4,1,7,8,2,6,0,9,1,5 };
int sz = sizeof(arr) / sizeof(int);
multiset<int> s(arr, arr + sz);
cout << s.size() << endl;
s.insert(10);
s.erase(1);
for (auto& e : s)
{
cout << e << " "; //不去重
}
cout << endl;
for (auto it = s.rbegin(); it != s.rend(); ++it)
{
cout << *it << " ";
}
cout << endl;
cout << s.count(5) << endl;
s.empty();
s.clear();
return 0;
}

本文详细介绍了C++标准库中的multiset容器,它是一个存储重复元素并保持排序的集合。multiset基于红黑树实现,提供快速的查找和迭代器遍历。文章列举了multiset的主要操作函数,包括插入、删除、查找等,并通过一个示例展示了如何使用multiset插入元素、遍历和删除元素。同时,还讨论了multiset与set的区别以及其时间复杂度特性。
550

被折叠的 条评论
为什么被折叠?



