//查找最小的k个元素
#include <iostream>
#include <vector>
#include <set>
using namespace std;
typedef multiset<int,greater<int>> IntHeap;
void FindKLeastNumbers
(
const vector<int> &data,
IntHeap &leastNumbers,
unsigned int k
)
{
leastNumbers.clear();
if(k==0 || data.size()<k)
{
return ;
}
vector<int>::const_iterator iter = data.begin();
for(;iter != data.end(); ++iter)
{
if(leastNumbers.size() < k)
{
leastNumbers.insert(*iter);
}
else
{
IntHeap::iterator iterFirst = leastNumbers.begin();
if(*iter < *(leastNumbers.begin()))
{
leastNumbers.erase(iterFirst);
leastNumbers.insert(*iter);
}
}
}
}
void main()
{
vector<int> arr;
arr.push_back(3);
arr.push_back(5);
arr.push_back(15);
arr.push_back(4);
arr.push_back(55);
arr.push_back(6);
IntHeap h;
FindKLeastNumbers(arr,h,3);
for(IntHeap::iterator i = h.begin(); i != h.end(); ++i)
{
cout << (*i) <<" ";
}
cout << endl;
}
运行结果:
5 4 3
请按任意键继续. . .