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

Posted 小小的小孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于c++用priority_queue实现最小堆,并求解最大的n个数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 优先队列

C++ STL:优先级队列priority_queue的使用方法和模拟实现

priority_queue用法

使用 `std::greater` 通过 `priority_queue` 创建最小堆的原因

有没有一种简单的方法可以在 C++ 中创建一个最小堆?

c++优先级队列priority_queue使用lambda表达式出错问题