STL數據結構
1.priority_queue
#include<queue>
pritority<int>q;(大根堆)
priority_queue<int,vector<int>,greater<int> >q;(小根堆)
struct
no{
????
int
x,v;
????
bool
operator <(
const
no &T)
const
{
return
v>T.v;}
// v值xiao的優先
};
queue<no>q;
?
2.vector
#include<vector>
vector<int>vec;
vec.push_back();(加入,從0開始)
vec.size()?
vec.pop_back()? (刪除末尾)
vec.clear();
使用迭代器訪問元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)cout<<*it<<endl;
插入元素:??? vec.insert(vec.begin()+i,a);在第i+1個元素前面插入a;
刪除元素:??? vec.erase(vec.begin()+2);刪除第3個元素
vec.erase(vec.begin()+i,vec.end()+j);刪除區間[i,j-1];區間從0開始
排序?sort(vec.begin(),vec.end(),cmp)
元素翻轉 reverse(vec.begin(),vec.end());
3.map
#include<map>
map<int,int>
直接用
4.bitset
#include<bitset>
bitset<100> s;
相當于flag[100]
也可以當做100位的二進制數
效率O(n/32)
5.set
include<set>
set<int>S//去重
multiset<int>S//不去重
?
S.begin()第一個
S.end()最后一個的下一位(沒有東西)
S.clear()
S.empty() ,判斷set容器是否為空
S.count(x);x出現次數
erase(iterator)? ,刪除定位器iterator指向的值
erase(key_value),刪除鍵值key_value的值
S.size()
lower_bound(key_value)?,返回第一個大于等于key_value的定位器
upper_bound(key_value),返回第一個大于key_value的定位器
插入?S.inset(x);
迭代器 set<int
>::iterator pos;
遍歷 for(pos=S.begin();pos!=S.end();pos++)
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<set>
using namespace std;
int main(){set<int>S;S.clear(); S.insert(1);S.insert(2);S.insert(3);set<int>::iterator it;it=S.begin();cout<<*it<<' '<<*S.begin()<<endl; //查找 set<int>::iterator t1,t2;t1=S.lower_bound(1);t2=S.upper_bound(1);cout<<*t1<<' '<<*t2<<endl;set<int>::iterator t3;t3=S.upper_bound(2);cout<<"? "<<*t3<<endl; //找不到就指向end //遍歷 for(it=S.begin();it!=S.end();++it){cout<<*it<<endl;}//統計/ 判斷是否出現 cout<<S.count(1)<<endl; //刪除it=S.end();S.erase(it); cout<<*S.end()<<endl;return 0;
}
6.next_permutation(a+1,a+n+1)
7.nth_element(first,kth,last,cmp)
?
nth_element(now+1,now+m+1,now+n+1,greater<ll>());
注意前m個是無序的,但保證是前m大