1. 程式人生 > >c++用priority_queue實現最小堆,並求解最大的n個數

c++用priority_queue實現最小堆,並求解最大的n個數

輸出 return bool rand cto and gre main 最小堆

 1 //c++用priority_queue實現最小堆,並求解很多數中的最大的n個數
 2 #include <iostream>
 3 #include <queue>
 4 #include <time.h>
 5 #include <vector>
 6 using namespace std; 
 7 struct Node {
 8     double value;
 9     int idx;
10     Node (double v, int i): value(v), idx(i) {}
11     friend bool operator
> (const struct Node &n1, const struct Node &n2) { 12 return n1.value > n2.value; 13 } 14 }; 15 int main(){ 16 //測試數據 17 vector<double> v; 18 srand((int)time(NULL)); 19 for(int i=0;i<100;i++){ 20 double tt=rand()%100; 21 cout<<tt<<endl; 22 v.push_back(tt);
23 } 24 cout<<"------------------------im the line-----------------------"<<endl; 25 //新建一個最小堆 26 priority_queue<Node, vector<Node>, greater<Node>> minheap; 27 //首先先建立一個大小為n的堆 28 for (int i=0;i<10;i++){ 29 Node Notemp(v[i],i); 30 minheap.push(Notemp); 31 }
32 //後面的都進行比較後再選擇是否放入 33 for(int i=10;i<100;i++){ 34 //當前的node 35 Node Noteamp(v[i],i); 36 // cout<<Noteamp.value<<endl; 37 if(minheap.top().value<Noteamp.value){ 38 //將這個大的數放進去 39 minheap.push(Noteamp); 40 //將堆頂最小的數彈出 41 minheap.pop(); 42 } 43 else{ 44 continue; 45 } 46 } 47 //輸出 48 for(size_t i=0;i<10;i++){ 49 cout<<minheap.top().value<<endl; 50 minheap.pop(); 51 } 52 53 }

c++用priority_queue實現最小堆,並求解最大的n個數