C ++:从容器中提取N个最高元素

时间:2013-01-11 20:20:36

标签: c++ algorithm stl

我经常需要从未排序的STL容器中提取N(> 1)个最高元素。天真的方法是使用<queue>

是否有更快,更少的样板?

2 个答案:

答案 0 :(得分:4)

要获取n个最小元素,请使用nth_element

std::vector<int> v = { 2, 6, 1, 13, 51, 5, 0, -1 };

std::nth_element(v.begin(), v.begin() + 3, v.end());

// now v[0], v[1], v[2] are the smallest, not otherwise sorted

确保#include <algorithm>。可以提供可选谓词来自定义排序顺序(例如std::greater<int>)。

答案 1 :(得分:3)

std::partial_sort如果您按顺序需要它们,否则std::nth_element,在任何一种情况下都使用greater作为您的谓词。

我无法判断提取是否意味着您要删除,但如果您这样做,则另一个选项是使用make_heap堆积容器,然后将N元素从中删除。< / p>