# 概述
multiset
(多重集) 是 C++ STL 中的一种容器,底层基于红黑树实现。使用时需要引入头文件 <set>
.
# 声明
multiset
默认采用升序排列,声明方式为
multiset<int> set; | |
multiset<int, less<int>> set; // equals to this |
如果希望以降序排列,则其声明如下:
multiset<int, greater<int>> set2; |
事实上,其完整声明为:
template<class Key, class Compare = std::less<key>, class Allocator> |
一个自定义并使用比较类的示例为:
struct point{ | |
double x, y; | |
}; | |
class cmp{ | |
bool operator()(const struct point &a, const struct point &b) { | |
return (a.x<b.x)?true:((a.x>b.x)?false:(a.y<b.y)?true:false); | |
} | |
}; | |
vector<point> vec1; | |
//... | |
sort(vec1.begin(), vec1.end(), cmp()); |
# 迭代器
multiset
底层为双向迭代器,支持 ++
和 --
, 但不支持 +
和 -
.
# 基本函数
以下函数都是定义为 multiset
类的成员函数,即需要通过 multiset1.func(val)
调用。
函数 | 作用 |
---|---|
insert(val) | 插入可重复元素 |
erase(val) | 删除全部 val 值元素 |
erase(it1, it2) | 删除两个迭代器之间的全部元素,不包括 it2 指向的元素 |
find(val) | 返回值为 val 的第一个元素,不存在则返回 end() |
lower_bound(val) | 返回值大于等于 val 的第一个元素,不存在则返回 end() |
upper_bound(val) | 返回值大于 val 的第一个元素,不存在则返回 end() |
count(val) | 返回值为 val 的元素个数 |
clear() | 清空 multiset |
swap(set2) | 将两个 multiset 交换 |
# Reference
- CSDN: multiset 用法详解