//佇列頭部值最大,大頂堆
priority_queue, greater<> >pq;
//小大頂堆
priority_queue, less<> >pq;
自定義()運算子,傳入兩個引數,內部寫》 實際上是從小到大排序與sort相反!
寫法一:
struct node
;struct cmp
};priority_queue,cmp>priq;
寫法二:
struct node
friend bool operator<(const node &a , const node &b)
};priority_queuepriq;
優先佇列的包裝函式多,一般是empty(),size(),pop(),top(),push()
以下介紹set,multiset用法類似
一般寫法
setse
自定義排序
struct mynode ;
struct rules
};setse;
set可以通過迭代器支援頭部刪除和尾部刪除(也就是一種支援可以刪除最值和動態更新的容器)
當然通過迭代器可以刪除任意位置的元素
//一些用法
se.erase(mset.begin());//刪除第乙個
mset.erase(--mset.end());//刪除最後乙個
vec.push_back((*(--mset.end())).id);//取出最後乙個元素的某個部分
set和multiset用處還是挺大的,常用的也是insert(),erase()(值或者位址),size(),empty()之類的
支援迭代器遍歷。
當然vector是陣列,是向量,不能像上面那樣維護動態的平衡樹
這裡介紹一下vector作為雙端佇列的使用,以及vector一些不常見的內建函式
// 任意位置插入乙個元素
vector::iterator it = vec.begin();
vec.insert(it, 2);
//任意位置插入 n 個相同元素
vec.insert(iterator it, int n, const t& x);
//插入另乙個向量的 [forst,last] 間的資料
vec.insert(iterator it, iterator first, iterator last);
vec.resize(10)//會分配 10 個 0 給vec,相當於 push_back(0) 10 次。
push_back()//後面插入
pop_back()//彈出最後乙個元素
back()//取出最後乙個元素
vec.front();//取出第乙個
vec.erase(iterator it);//任意位置刪除乙個元素
vec.erase(iterator first, iterator last);//刪除 [first,last] 之間的元素
at 方法訪問:vec.at(1); // 和下標訪問區別就是 at 會檢查是否越界,是則丟擲 out of range 異常
vector容器也適用迭代器 C STL之vector的自定義實現
2018.10.15 至今一直在尋找c 開發崗位的工作,但是剛畢業,沒有工作經驗與專案經歷,工作一直不太好找。聊天中有個朋友說你把stl自己實現一下,放在部落格上,簡單的當作自己的專案。於是就寫了這篇部落格。注意點 1 如果是像本文一樣採取類模板template 泛型 來實現,則類的實現與類的宣告要...
mysql中欄位自定義排序
今天專案中遇到乙個對sql查詢結果需要按欄位 自定義 排序的問題。如 預設是 0,1,2。結果為 1,0,2或 1,2,0 mysql 中使用 field field 注 第乙個field為關鍵字,field 為要指定的字段。select t.from tbl obj order t order b...
Flex Datagrid中,如何自定義排序的方式
在使用datagrid的時候,會遇到把表示的資料排序的時候,但是,有時候,不想用datagrid自帶的排序時,可以用如下的方法來自定義自己想要的排序方法。自定義排序方法如下,需要自己手動寫一段排序的方法,在這個方法裡,定義你的排序方式,然後,只要把這個方法應用到datagrid的某一列就好了。1 自...