常用的C++ STL

一、priority_queue(实现堆的用法)

#include <queue>

基本操作

  1. empty() 如果队列为空,则返回真
  2. pop() 删除队头元素
  3. push() 加入一个元素
  4. size() 返回优先队列中拥有的元素个数
  5. top() 返回优先队列中有最高优先级的元素

声明方法:

1.普通方法:

priority_queue<int>q; //默认从大到小顺序出队

priority_queue<int,vector<int>,greater<int> >q;; //默认从小到大出队

2.结构体声明方式:

struct node {
    int x,y;
    friend bool operator < (node a,node b){
        return a.x>b.x;  //默认按x从小到大的顺序输出
    }
}
priority_queue<node>q;

二、set(实现二叉搜索树的用法)

#include <set>

基本操作

  1. begin() 返回指向第一个元素的迭代器
  2. clear() 清除所有元素
  3. count() 返回某个值元素的个数
  4. empty() 如果集合为空,返回true(真)
  5. end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
  6. erase() 删除集合中的元素
  7. find() 返回一个指向被查找到元素的迭代器
  8. insert() 在集合中插入元素
  9. max_size() 返回集合能容纳的元素的最大限值
  10. size() 集合中元素的数目
  11. swap() 交换两个集合变量

set的要使用迭代器去访问。

set<int>::iterator iter; //定义一个迭代器变量iter,用法类似指针,*iter表示其指向的值

对于集合来说,一般有并集、交集、差集、补集这几种操作,所以在set的操作中我们也有类似的集合操作。

在#include <algorithm>头文件里。

设有set_A,set_B和用来存储操作结果的set_C。

set_union(A.begin(),A.end(),B.begin(),B.end(),inserter(C,C.begin()));//求并集
set_intersection(A.begin(),A.end(),B.begin(),B.end(),inserter(C,C.begin()));//求交集
std::set_difference(A.begin(),A.end(),B.begin(),B.end(),inserter(C,C.begin()))//求A-(A和B的交集)
std::set_symmetric_difference(A.begin(),A.end(),B.begin(),B.end(),inserter(C,C.begin()))//求A和B的并集减去A和B的交集
for(iter=C.begin();iter!=C.end();iter++)
cout<<*iter<<' ';//查看C的元素,是按升序输出的

自定义set的排序方式

struct intCmp{
	bool operator() (const int& a,const int& b) const{
		return a>b;
	}
};
set<int,intCmp>st;
int main(){
	int n,tmp;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>tmp;
		st.insert(tmp);
	}
	set<int>::iterator it;
	for(it=st.begin();it!=st.end();it++){
		cout<<*it<<" ";
	}
	cout<<endl;
	return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值