您的位置:首页 > 其它

找出一组数中的最小k个数 适合海量数据处理的方法

2014-04-26 16:44 239 查看
#include<set>

#include <vector>

#include <iostream>

using namespace std;

typedef multiset<int,greater<int>> intSet;

typedef multiset<int,greater<int>>::iterator setIterator;

void GetLeastNumbers(const vector<int>& data,intSet& leastNumbers,int k)

{

leastNumbers.clear();

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

{

setIterator iterGreatest=leastNumbers.begin();

if (*iter<*(leastNumbers.begin()))

{

leastNumbers.erase((iterGreatest));

leastNumbers.insert(*iter);

}

}

}

}

int main(void)

{

vector<int> vi;

vi.push_back(1);

vi.push_back(5);

vi.push_back(7);

vi.push_back(9);

vi.push_back(15);

vi.push_back(2);

vi.push_back(3);

vi.push_back(4);

//vector<int>::iterator it;

vector<int>::iterator itb=vi.begin();

vector<int>::iterator ite=vi.end();

intSet is;

/*for (;itb!=ite;++itb)

{

cout<<*itb<<endl;

}*/

GetLeastNumbers(vi,is,4);

setIterator stb=is.begin();

setIterator stn=is.end();

for (;stb!=stn;++stb)

{

cout<<*stb<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: