set和multiset
(set)是不可重集,(multiset)是可重集。插入、查看、查询的复杂度都是(O(log(n)))的。会自动从小到大排序。
迭代器:(set < int >:: iterator it = ...),对应的数值为(*it)
(s.erase(it))(删掉迭代器)后,(it)就没了!!
几种常见的操作:
(s.size()):返回当前的元素数量
(s.empty()):判断大小是否为零,等同于(size()==0),效率更高
(s.begin()/s.end()):返回一个迭代器,指向第一个/最后一个元素
(s.find(val)):返回一个迭代器,指向元素值为(val)的第一个元素,如果没有返回(end())
(s.count(val)):返回元素值为(val)的个数
(s.lowerunderline{}bound(val)/s.upperunderline{}bound(val)):返回一个迭代器,指向元素值 (ge{val}/>val)的第一个元素
(s.erase(val)):删除与(val)相等的所有元素,返回被移除的元素个数
(s.erase(pos)):移除迭代器(pos)所指位置元素,无返回值
(s.insert(val)):插入值(val),返回一个迭代器指向(val)
(s.insert(pos, val)):插入值(val),返回一个迭代器指向(val),(pos)为搜索起点,提升插入速度
(s.clear()):移除所有元素,将容器清空
vector
(vector)可以理解为一个动态数组。
注意(push\_back(x))是插入的(x)这个数。
遍历(vector)可以用迭代器,也可以直接(for (int i = 0; i <a.size(); i ++ ) a[i]...)
重载运算符
bool operator < (const node &a, const node &b)
{
return a.x < b.x && a.y < b.y;
}//重载运算符“<”
lower_bound() & upper_bound()
(lower\_bound(a + 1, a + n + 1, x) - a)是用来找到一个递增数列中,第一个(ge{x})的数的位置。(upper\_bound())则是(>x)。
注意:(lower\_bound())很容易出错,因为可能会有多个相等的数,而它只会找到第一个位置,可能会漏掉数