set 集合 有序的
multiset 多重集合 有序的
s.insert
pair<iterator, bool>
s.erase
s.erase(s.find(x))
lower_bound
和 upper_bound
s.begin()
--s.end()
或 s.rbegin()
for (auto i : s)
for (set<int>::iterator it = s.begin() it != s.end(); it++)
for (auto it = s.rbegin() it != s.rend(); it++)
询问第k大值
询问一个值是第几大
priority_queue 能做的,set 都能做,但是 set 慢一些
C++ set = Java TreeSet (sorted set)
C++ unordered_set = Java HashSet
Python 用 SortedList 实现 C++ set 的功能
s.find(x)
如果 x 在 set 中,返回 iterator
如果不在 返回 s.end()
s.lower_bound(x) set 中 >= x 最小的
s.upper_bound(x) set 中 > x 最小的
如果存在,返回 iterator
如果不存在,那么返回 s.end()
如果 x 不在 s 中,那么 lower_bound 和 upper_bound 结果相同(不存在 == x 的位置)
--s.lower_bound(x) set 中 < x 最大的
--s.upper_bound(x) set 中 <= x 最大的
需要注意如果x已经是最小的数字,那么可能出错。
for (auto i: s) { }
可以利用 insert 的返回值判断是否删除成功
multiset 删除一个 要先 find 再 erase