C STL 如何調堆 兩種方法 看了就懂

2021-08-15 23:18:01 字數 1175 閱讀 3468

記住掉stl裡的東西要在前面加上use namespace std;

1.優先佇列

這個堆我想應該是最常用的,因為寫起來方便,但是時間效率上不高,往往比手寫的多乙個係數。所以本人不是很喜歡用。

需要用到algorithm這個庫。

定義:

priority_queue《儲存型別》 變數名稱,例如priority_queue< int > hep;

注意了,這是大根堆,也就是堆頂是最大的。

如果要調小根堆,那麼就需要多乙個庫queue,然後定義的時候需要這麼寫:

priority_queue< int,vector< int >,greator< int > >

ps:greator< int >後一定要加空格,否則c++就會認為是》。

如果你要掉多關鍵字,那麼你需要過載運算子。而且你不能直接檢視堆中的元素,只能知道堆頂的元素。

運用:

hep為例:

hep.size():返回堆內元素個數。

hep.empty():如果堆為空,返回真,否則返回假。

hep.top():返回堆頂元素。

hep.pop():刪除堆頂元素,自動整理。

hep.push(int x):插入乙個元素,自動整理。

其實也就這麼多,但是注意這個堆是很慢的,在資料大的時候最好不用。

2.(我也不知道怎麼叫)

這種方法速度很快,接近手寫的堆,我也一直這麼寫,雖然稍微麻煩點,但是也麻煩不到**去。只需用到algorithm這個庫。

定義:型別 名稱;例如 int hep;就是定義乙個陣列就行了。

我們需要寫兩個函式。

void put(int x)

int get()

其實就是排序一樣的格式,注意這裡也是大根堆,如果要小根堆,就講堆中元素取反,然後取出時再取反就可以了,當然可以寫cmp,或過載運算子。

LCA兩種方法

lca least common ancestors 即最近公共祖先,是指在有根樹中,找出某兩個結點u和v最近的公共祖先。模板題 anc i j 表示第i個點的2 j的祖先的標號 整個過程就是兩個點往上跳到同一深度,再一起往上跳找到lca include include using namespac...

post get 兩種方法

a.定義乙個get函式 get url,headers none defget url,headers none return urlrequests url,headers headers 內部可以呼叫urlrequests 如果不寫headers headers會被預設為none b.定義乙個p...

popup的兩種方法

1,popup var pop function window.onload function aaa function closediv 2,div var divtop,divleft,divwidth,divheight,docheight,docwidth,objtimer,i 0 var ...