您可以将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;
Run Code Online (Sandbox Code Playgroud)
然后,要么
auto idx = std::distance(v.begin(), lower);
Run Code Online (Sandbox Code Playgroud)
或简单的算术:
auto idx = lower - v.begin();
Run Code Online (Sandbox Code Playgroud)