基於vector實現帶有鍵值的最小 大 堆

2021-10-25 08:04:04 字數 1721 閱讀 4462

最小(大)堆作為乙個二叉樹結構,廣泛應用於最值維護問題。其時間複雜度相對於最小值查詢來說,能夠從o(n)降低到o(logn)。這裡,我們介紹基於vector和c++標準庫的帶鍵值最小堆實現。

# include # include # include
如果是不帶鍵值的最小堆,比較容易實現。

vectorminlist;

make_heap(minlist.begin(), minlist.end(), greater());

//minlist變成最小堆

//堆更新,將vector的最有乙個值,加入到已經建堆的vector裡

minlist.push_back(9);

push_heap(minlist.begin(), minlist.end(), great());

//堆彈出,將堆的根節點彈出到vector的最後,並彈出

pop_heap(minlist.begin(), minlist.end(), great());

minlist.pop_back();

在實際應用中,資料往往是以鍵值的形式進行處理的。除了進行處理比較值外,還有對應的鍵。我們希望將鍵值做為一對資訊進行處理。這裡,就要引入pair<>資料型別。

vector> minkeyheap;

minkeyheap.push_back(make_pair(distance_i, index_i));

make_heap(minkeyheap.begin(), minkeyheap.end(), greater>());

類似於sort,比較方法也能夠被重寫,參照如下格式。

// template struct greater

templatestruct greater : public binary_function<_ty, _ty, bool>};

// template struct less

templatestruct less : public binary_function<_ty, _ty, bool>

};

這樣我們就得到了對於鍵值資料的最小堆。這裡給乙個**示例:(我們修改了最小堆的比較運算子,使得變成基於char比較的最大堆)

#pragma once

#include #include #include #include #include # include # include using namespace std;

// template struct greater

templatestruct greaternew: public binary_function, pair, bool>

};void main()

cout << "design min-heap"<>());

for (int i = 0; i < minkeyheap.size(); i++)

}

輸出:

original vector

0.12, d

0.22, c

0.11, b

default min-heap

0.11, b

0.22, c

0.12, d

design min-heap

0.12, d

0.22, c

0.11, b

981 基於時間的鍵值儲存

weekly contest 121的 基於時間的鍵值儲存 建立乙個基於時間的鍵值儲存類timemap,它支援下面兩個操作 set string key,string value,int timestamp get string key,int timestamp 示例1 輸入 inputs tim...

981 基於時間的鍵值儲存

設計乙個基於時間的鍵值資料結構,該結構可以在不同時間戳儲存對應同乙個鍵的多個值,並針對特定時間戳檢索鍵對應的值。實現 timemap 類 timemap 初始化資料結構物件 void set string key,string value,int timestamp 儲存鍵 key 值 value,...

基於Vector實現介面卡stack 順序棧

棧遵循先進後出,後進先出的原則,它的插入和刪除都是在棧頂進行操作,是一種特殊的線性順序表,因此,實現棧我們通常建立在順序表的基礎上。下來我們利用之前實現過的容器vector中的一部分介面來實現stack 在這裡分別用了模板引數和模板的模板引數兩種方式來實現來實現 stack.h define crt...