gpt4 book ai didi

C++ - 已排序 std::vector 中元素的索引

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:17 28 4
gpt4 key购买 nike

我有一个我知道已排序的 std::vector。使用 std::binary_search 我可以在日志时间内找到一个元素是否在 vector 中。不幸的是,如果成功,std::binary_search 不会返回 vector 中元素的索引(或者如果成功了,我不知道如何访问它)。 std::find 会给我一个元素的迭代器,但它没有使用 vector 已排序的事实,因此它以线性时间而不是对数时间运行。我知道我可以轻而易举地实现我自己的二进制搜索算法,但我想知道在标准中是否有一种方法可以做到这一点。

最佳答案

您可以使用 std::lower_bound (O(log(N)) 和 std::distance(随机访问迭代器的 O(1)):

auto lower = std::lower_bound(v.begin(), v.end(), val);
// check that value has been found
const bool found = lower != v.end() && *lower == val;

那么,要么

auto idx = std::distance(v.begin(), lower);

或简单算术:

auto idx = lower - v.begin();

关于C++ - 已排序 std::vector 中元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19481662/

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