#include<iostream> #include <set> #include <vector> #include<algorithm> #include<functional> using namespace std; typedef multiset<int, greater<int>> HeapMax; //获取k个最小的数 void Min_Num(unsigned int k,HeapMax& Heap_Max,vector<int> &Data_vector); int main() { std::vector<int> Data; unsigned int k; unsigned int m; cin>>k; cin>>m; int temp; //输入向量数据 for (int i=0;i<=m;i++) { cin>>temp; Data.push_back(temp); } //定义接收 HeapMax Min_k; Min_Num(k,Min_k,Data); HeapMax::iterator iter_min=Min_k.begin(); //遍历输出 for (;iter_min!=Min_k.end();iter_min++) { cout<<*iter_min<<'\t'; } system("pause"); return 0; } void Min_Num(unsigned int k,multiset<int, greater<int>>& Heap_Max,vector<int> &Data_vector) { Heap_Max.clear(); //特殊情况考虑 if (k==0 || Data_vector.size()<0) { return; } //向量遍历 std::vector<int>::iterator iter=Data_vector.begin(); for (;iter<Data_vector.end();++iter) { //取前k个数 if (Heap_Max.size()<k heap_max="" insert="" iter="" else="" heapmax::iterator="" iter_max="Heap_Max.begin();" if="" heap_max="" begin="">(*iter)) { Heap_Max.erase(Heap_Max.begin()); Heap_Max.insert(*iter); } } } } </k></int></int></int></int></int></int></functional></algorithm></vector></set></iostream>