gpt4 book ai didi

c++11 - 使用 STL 查找小于当前的最大元素

转载 作者:行者123 更新时间:2023-12-04 20:04:39 25 4
gpt4 key购买 nike

是否有一个单行查找排序容器中小于某个元素 x 的最大元素?我基本上对任何会给我一个指向小于 x 的最大元素的迭代器的代码感兴趣。

我知道如何自己编写代码,但希望有一个库函数......

编辑:也许我应该在这里澄清一下,我想到的我自己编码的版本是基于二进制搜索的,因此在 O(log n) 时间内运行。我需要为最多有几百万个元素的列表计算这个。

最佳答案

由于您的容器已排序,您可以使用 std::max_element 在第一个元素大于最大值的范围内,使用 std::find_if使用 lambda,或 std::lower_bound得到这个范围:

int main()
{
std::set<int> s{ 3, 1, -14, 1, 5, 9 };
std::set<int>::iterator result;

int max_value = 6;
result = std::max_element(std::begin(s), std::find_if(std::begin(s), std::end(s), [&](int i) { return i >= max_value; } ) );
std::cout << "max element is: " << *result;
}

输出:

max element is: 5



Live Demo

或与 std::lower_bound :
int main()
{
std::set<int> s{ 3, 1, -14, 1, 5, 9 };
std::set<int>::iterator result;

int max_value = 6;
result = std::max_element(std::begin(s), std::lower_bound(std::begin(s), std::end(s), max_value)) ;
std::cout << "max element is: " << *result;
}

Live Demo

关于c++11 - 使用 STL 查找小于当前的最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27925621/

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