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 }
时间: 2024-11-12 16:34:32