#include <set>
#include <vector>
#include <iostream>
using namespace std;
typedef multiset<int, less<int> > intSet;
typedef multiset<int, less<int> >::iterator setIterator;
intSet leastNumbers;
void GetLeastNumbers_Solution2(const vector<int>& data, intSet& leastNumbers, int k)
{
leastNumbers.clear();
setIterator iterGreatest = leastNumbers.begin();
if(k < 1 || data.size() < k)
return;
vector<int>::const_iterator iter = data.begin();
for(; iter != data.end(); ++ iter)
{
if((leastNumbers.size()) < k)
leastNumbers.insert(*iter);
else
{
if(*iter >*(leastNumbers.begin()))
{
leastNumbers.erase(leastNumbers.begin());
leastNumbers.insert(*iter);
}
}
}
for(iterGreatest = leastNumbers.begin();iterGreatest!=leastNumbers.end();++iterGreatest)
cout<<*iterGreatest<<" ";
}
int main()
{
int a[5]={475,4,1,23,98};
vector<int> b;
vector<int>::const_iterator iter = b.begin();
for(int j=0; j<5; ++j)
b.push_back(a[j]);
GetLeastNumbers_Solution2(b,leastNumbers,3);
return 0;
}