优先队列(priority_queue)
优先队列之简单元素
大顶堆
priority_queue<int> q;
小顶堆
priority_queue<int, vector<int>, greater<int> >q;
优先队列之结构体
按某一成员的值建大顶堆
struct node { int a; int b; }; bool operator < (node x,node y) { return x.a < y.a; } priority_queue<node> q;
按某一成员的值建小顶堆
struct node { int a; int b; }; bool operator < (node x,node y) { return x.a > y.a; } priority_queue<node> q;
集合(Set)
集合操作:
- set_union 求两个集合的并集
int main()
{
set<int> s[20];
s[1].insert(1);
s[2].insert(2);
set<int> rs;
set_union(s[1].begin(),s[1].end(),s[2].begin(),s[2].end(),inserter(rs,rs.begin()));//set_union参数为集合时
for(set<int>::iterator it=rs.begin();it!=rs.end();it++) printf("%d ",*it);
return 0;
}
- set_intersection 求两个集合的交集,用法和上面类似。
- set_difference 求两个集合的差集(第一个集合减第二个集合的差集),用法和上面类似。
上面三个函数的复杂度都是O(2*(m + n) - 1),m、n为两个集合的大小。