#include
pritorityq;(大根堆)
priority_queue,greater>q;(小根堆)
struct
no
// v值xiao的優先
};
queueq;
#include
vectorvec;
vec.push_back();(加入,從0開始)
vec.size()
vec.pop_back() (刪除末尾)
vec.clear();
使用迭代器訪問元素.
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it《插入元素: 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());
#include
map直接用
#include
bitset<100> s;
相當於flag[100]
也可以當做100位的二進位制數
效率o(n/32)
include
sets//去重
multisets//不去重
s.begin()第乙個
s.end()最後乙個的下一位(沒有東西)
s.clear()
s.empty() ,判斷set容器是否為空
s.count(x);x出現次數
erase(iterator) ,刪除定位器iterator指向的值
erase(key_value),刪除鍵值key_value的值
lower_bound(key_value),返回第乙個大於等於key_value的定位器
upper_bound(key_value),返回第乙個大於key_value的定位器
插入 s.inset(x);
迭代器 set::iterator pos;
遍歷 for(pos=s.begin();pos!=s.end();pos++)
#include#include#include#include#include#include#includeusing namespace std;
int main(){
sets;
s.clear();
s.insert(1);s.insert(2);s.insert(3);
set::iterator it;
it=s.begin();
cout<<*it<<' '<<*s.begin()<::iterator t1,t2;
t1=s.lower_bound(1);t2=s.upper_bound(1);
cout<<*t1<<' '<<*t2<::iterator t3;
t3=s.upper_bound(2);
cout<<"? "<<*t3<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());
注意前m個是無序的,但保證是前m大
資料結構 STL
棧 先入後出 filo 的一種資料結構。常見操作 模擬火車調頭,進製轉換,表示式求值,單調棧 陣列形式 理解 const int num 1e6 10 定義棧的大小,可自由改變 int stac num 乙個整型棧 int top 棧頂指標 int main top 1 設定棧頂指標為 1 stac...
資料結構 stl
uva 11997 題意 給你乙個數k,並且給你k組數,每組k個數,現在在每組中任取乙個數,然後相加可以得到乙個和,這樣的和共有k k個,要求輸出所有可能的和值中最小的k個。思路 問題1 如果只有a,b,c三個大小為k的陣列,我們如何求 和 能獲得最小的前k個和呢?我們只需要將a和b陣列求出前k小的...
資料結構 stl
1022 心中mmp,很簡單的一道題目,做了兩個小時,改錯乙個半小時,最後錯出在了while的判斷條件上,有什麼區別麼。題意 給出該數字序列的進棧順序,並給出要求的出棧順序,要你判斷是否能按照這個順序出棧。思路 我們只要用兩個指標i和j,指向當前需要處理的入棧和出棧的那個字元即可。先看如果我們把棧s...