我经常需要从未排序的STL容器中提取N(> 1)个最高元素。天真的方法是使用<queue>
。
是否有更快,更少的样板?
答案 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>