C++ stl等常用技巧

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())很容易出错,因为可能会有多个相等的数,而它只会找到第一个位置,可能会漏掉数

原文地址:https://www.cnblogs.com/andysj/p/13831857.html