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 .
不确定我们是否能保证 e
是 v
元素的引用。
关于使用索引信息的 C++partition_point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421622/