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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!