lir*_*n63 1 c++ binary search stl binary-search
我需要一个二进制搜索功能。
我在标准库中找不到任何函数,该函数将返回找到的项目的索引,如果找不到,将返回比我要查找的项目大的下一个元素的索引的按位补码。
我要寻找的功能是什么?
编辑:我需要将一个项目插入已排序的向量并保持其排序。这就是为什么我需要按位补全索引。
我敢肯定,标准库不包含任何可以完全满足您要求的内容。
要获得所需的内容,您可能要从std::lower_bound或开始std::upper_bound,并将其返回的迭代器转换为索引,然后对找不到值的索引进行补充。
据我所知,没有简单的 STL 方法可以针对排序向量返回索引,但是您可以使用下面的示例函数:
/**
 * @param v - sorted vector instance
 * @param data - value to search
 * @return 0-based index if data found, -1 otherwise
*/
int binary_search_find_index(std::vector<int> v, int data) {
    auto it = std::lower_bound(v.begin(), v.end(), data);
    if (it == v.end() || *it != data) {
        return -1;
    } else {
        std::size_t index = std::distance(v.begin(), it);
        return index;
    }   
}
Run Code Online (Sandbox Code Playgroud)
        这段代码应该可以正常工作
auto itr = lower_bound(v.begin(), v.end(), key) ;
index = distance(v.begin(), itr);
Run Code Online (Sandbox Code Playgroud)
有关 std::lower_bound() 的更多信息 - https://www.geeksforgeeks.org/stdlower_bound-in-c/