C STL中的自定義排序和vector

2021-10-04 00:17:45 字數 1746 閱讀 9524

//佇列頭部值最大,大頂堆

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 自...