priority_queue<
int, vector<
int>
, less<
int>>s;
//less表示按照遞減(從大到小)的順序插入元素
priority_queue<
int, vector<
int>
, greater<
int>>s;
//greater表示按照遞增(從小到大)的順序插入元素
不寫第三個引數或者寫成less都是大根堆。greater是小根堆。
vector<
int> a;
make_heap
(a.begin()
,a.end()
, less<
int>()
);//建立大根堆
make_heap
(a.begin()
,a.end()
, greater<
int>()
);//建立小根堆
push_heap
(a.begin()
,a.end
());
//將最後乙個元素插入堆中(堆自動調整)
pop_heap
(a.begin()
,a.end
());
//將第乙個元素從堆中刪去(堆自動調整),並放到最後
/*
給定乙個整數陣列,如何快速地求出陣列中第k小的數。假如陣列為:。
*/#if 1
intgetmin
(int
* a,
int len,
int k)
return res;
}int
main()
; cout <<
getmin
(a,6,4
)<< endl;
return0;
}#endif
第四小的數字是:
其他一些關於堆的函式用法 參照:
其他函式應用
/*
真題496:每20個陣列,每個陣列有50個元素,並且使有序的,現在如何在這20*500個陣列中找出排名前5的數。
*/#if 0
#define rows 3
#define cols 5
//int num[rows][cols] = ,, };
int num[rows]
[cols]=,
,};struct node };
void
gettop
(int k)
for(
int i =
0; i < k;
++i)
cout << endl;
}int
main()
#endif
堆(大根堆 小根堆)
堆又可稱之為完全二叉堆。這是乙個邏輯上基於完全二叉樹 物理上一般基於線性資料結構 如陣列 向量 鍊錶等 的一種資料結構。學習過完全二叉樹的同學們都應該了解,完全二叉樹在物理上可以用線性資料結構進行表示 或者儲存 例如陣列int a 5 就可以用來描述乙個擁有5個結點的完全二叉樹。那麼基於完全二叉樹的...
STL應用之大根堆小根堆
定義 priority queue 大根堆 priority queue,greater x 小根堆 訪問最值使用 top 堆自動把最值維護在堆最上層 刪除最值使用 pop 刪除後自動維護出乙個新堆 插入元素使用 push x 插入到元素該在的位置上 並自動維護堆有序 include include...
堆(Heap)大根堆 小根堆
具有以下的特點 1 完全二叉樹 2 heap中儲存的值是偏序 min heap 父節點的值小於或等於子節點的值 max heap 父節點的值大於或等於子節點的值 一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為...