使用索引信息的 C++partition_point

标签 c++ stl binary-search

C++ 中是否有一些东西基本上相当于partition_point,但我可以在其中使用索引作为额外信息?

例如,假设我有一个 vector<int> X = {0,1,2,8,9,11}我知道已排序并且只有非负整数,我想要第一个索引 X[i] != i 。我将如何编写这个的二进制搜索版本?我知道谓词 X[i] == i返回true true true false false false .

如果我不需要使用索引,我可以只使用 std::partition_point 。我可以自己编写,但是,实际上,有人可能已经编写了一个没有错误的版本。

谢谢。

最佳答案

您可以尝试这个版本。

auto it = std::partition_point(std::begin(v), std::end(v),
              [&](const int& e) { return e == (&e - std::data(v)); });

Demo .

不确定我们是否能保证 ev 元素的引用。

关于使用索引信息的 C++partition_point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421622/

相关文章:

C++11 线程安全队列

c++ - 在 C++ 中用 -1 初始化全局二维数组

C++,读取二进制 ifstream 时的奇怪行为

c++ - 如何使 vector 的元素独一无二? (删除不相邻的重复项)

c++ - 使用 STL 迭代器实现 Bentley-McIlroy 三向分区?

java - 如何使用仅使用单词而不使用数字的二分搜索?

c++ - 一个类自动生成序列化函数的宏

c++ - 在 C 中,free()'ing 动态分配的原始数组是必要的吗?

c++ - C++ STL中的二叉搜索树实现?

java - 二进制搜索运行时的某些异常