找出一组数中的最小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;
}
#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;
}
相关文章推荐
- 二.用最小堆方法找出海量数据中最小的k个数
- 最小的k个数--适合处理海量数据
- 十道海量数据处理面试题与十个方法大总结
- 数据库处理海量数据时的一些优化查询速度方法
- 海量数据处理:十道面试题与十个海量数据处理方法总结
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
- 算法13_10种海量数据处理方法
- 十道海量数据处理面试题与十个方法大总结
- 十道海量数据处理面试题与十个方法大总结
- 十道海量数据处理面试题与十个方法大总结
- mysql处理海量数据时的一些优化查询速度方法
- MySQL 处理海量数据时的一些优化查询速度方法
- 转 -- 十道海量数据处理面试题与十个方法大总结
- 十道海量数据处理面试题与十个方法大总结
- 十道海量数据处理面试题与十个方法大总结
- [转载]十道海量数据处理面试题与十个方法大总结
- 十个海量数据处理方法大总结
- [转载]大数据量,海量数据 处理方法总结
- css ie中最小(最大)高度(宽度) 的处理方法
- mysql处理海量数据时的一些优化查询速度方法