c++ - 使用 std::vector<std::string> 的快速搜索算法

标签 c++ search vector

    for (std::vector<const std::string>::const_iterator it = serverList.begin(); it != serverList.end(); it++)
    {
        // found a match, store the location
        if (index == *it) // index is a string
        {
            indexResult.push_back(std::distance(serverList.begin(), it)); // std::vector<unsigned int>
        }
    }

我已经编写了上面的代码来查看一个字符串 vector 并返回另一个包含任何“命中”位置的 vector 。

有没有办法做同样的事情,但速度更快? (如果容器中有 10,000 件元素,则需要一段时间)。 请注意,我必须检查所有项目的匹配项并将其位置存储在容器中。

奖励荣誉:任何人都知道我如何进行搜索的任何方式/链接,以便它找到部分结果(示例:搜索“coolro”并存储变量“coolroomhere”的位置)

最佳答案

对 vector 排序后使用binary_search

  1. std::sort( serverList.begin() , serverList.end() )
  2. std::lower_bound(serverList.begin() , serverList.end() , valuetoFind) 寻找第一个匹配项
  3. 如果您想找到所有匹配的元素,请使用std::equal_range

lower_bound & equal_range 搜索因为它是二进制的,所以与 O(N) 的搜索相比是对数的

关于c++ - 使用 std::vector<std::string> 的快速搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122488/

相关文章:

c++ - 在 xcode 中切换到 objective-c++ 时出现 malloc 错误

php - 对mysql中的多个字段进行加权搜索的最佳方法?

java - 使用 elasticsearch 对文本进行分类

c++ - 删除字符串 vector 中前 2 个字符的重复项

c++ - 编译时优化 - 从发布二进制文件中删除调试打印

c++ - WinDbg 中的_invoke_watson 是什么?

c++ - C++中的字符串和指针

java - 正则表达式 - 搜索一个单词并使用不区分大小写的相同单词替换它

python - 在 numpy 数组中查找有序向量

c++ - 在范围内声明 vector