海量数据中找最大值/最小值问题
解题思路:通过优先级队列(小跟堆)的队头是最小的来与vec中的数据比较来找最小的n个数。
int _tmain(int argc, _TCHAR* argv[])
{
/*
请定义一个vector<int> vec;
以系统时间为种子,
随机产生1-1000000之间的整数100000个,添加到vector
当中,
请找出vec当中,值最小的前10个元素的值并打印出来
*/
vector<int> vec;
srand(time(0));
for (int k = 0; k < 100000; ++k)
{
vec.push_back(rand() % 100000 +1);
}
priority_queue<int, vector<int>,less<int>> que;//小跟堆
for (int k = 0; k < 10; ++k)
{
que.push(vec[k]);
}
for ( int k = 10; k < vec.size(); ++k)
{
if (vec[k] < que.top())
{
que.pop();
que.push(vec[k]);
}
}
while (!que.empty())
{
cout << que.top() << endl;
que.pop();
}
}
运行结果:
将大于号改成小于号同时使用大跟堆。