码迷,mamicode.com
首页 > 编程语言 > 详细

c++用priority_queue实现最小堆,并求解最大的n个数

时间:2017-11-10 00:16:10      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:out   span   gre   using   queue   std   clu   priority   很多   

 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个数

标签:out   span   gre   using   queue   std   clu   priority   很多   

原文地址:http://www.cnblogs.com/geooeg/p/7811833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!