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


 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM