最小(大)堆作為乙個二叉樹結構,廣泛應用於最值維護問題。其時間複雜度相對於最小值查詢來說,能夠從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...