c++ - 从 vector 中获取 n 个最佳元素?

标签 c++ vector data-structures stl

我有一个结构 vector ,为此我重载了所有比较运算符。我不知道编译时结构的大小。

检索 vector 中 n 个最佳(其中“最佳”可以是最小或最大)元素的最快方法是什么?我知道 max_element 和 min_element 但它们只返回一个元素。我宁愿不循环 n 次,检索最佳元素,删除它然后获取下一个元素。这种方法似乎太慢了。

谢谢。

最佳答案

您可以使用 std::nth_element,它将最小的 n 元素移动到范围中的前 n 位置(注意这些 n 元素的相对顺序未定义)。

std::vector<T> objects;
std::nth_element( objects.begin(), objects.begin() + n, objects.end() );

// Now the range [objects.begin(), objects.begin() + n) contains the lowest n elements
// Obviously n must be <= objects.size()

当您写到在编译时不知道结构的大小时,我假设您有一个多态对象的集合,并且您有一个指针 vector 而不是元素 vector 。没什么大不了的,您仍然可以将 std::nth_element 与 lambda 一起使用。

std::vector<T*> objects;
std::nth_element( objects.begin(),
                  objects.begin() + n,
                  objects.end(),
                  [](const T * lhs, const T * rhs)
                  {
                      return (*lhs) < (*rhs); // Or (*lhs) > (*rhs) for the greatest n elements
                  });

关于c++ - 从 vector 中获取 n 个最佳元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309871/

相关文章:

c++ - 类字段在函数内部不可访问

c# - 类似于字典的数据结构,但有范围?

c++ - C++ 是否提供了一种无需范围解析运算符即可访问类中类的方法?

c++ - 没有规则使目标 `glfw3.dll'

c++ - 标准复制问题

python - 快速查找给定向量的字典向量。高维度

c++ - 将字符串插入二维 vector 的指定位置

algorithm - 为大学生生成潜在的时间表

python - 如何减少集点?

c++ - Xcode 中 DEBUG 标识符的编译错误