gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:49:08 26 4
gpt4 key购买 nike

我有一个结构 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com