c++用priority_queue實現最小堆,並求解最大的n個數
阿新 • • 發佈:2017-11-10
輸出 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個數