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 }

原文链接: https://www.cnblogs.com/geooeg/p/7811833.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/262939

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午3:30
下一篇 2023年2月14日 下午3:30

相关推荐