【问题标题】:C++: Searching an array of strings that begin with a given prefixC ++:搜索以给定前缀开头的字符串数组
【发布时间】:2014-02-27 01:14:06
【问题描述】:

假设给定一个字符串向量vector<string> names = {"ab","abs","act","add"}。我还得到了一个字符串前缀string prefix ("ab")。我的工作是用所有以给定前缀开头的名称填充另一个字符串向量(我们称之为vector<string> name_list)。目前我通过简单地使用如下的字符串比较函数来做到这一点:

for (int i = 0; i < names.size(); ++i)
{
    if (names[i].compare(0, prefix.size(), prefix) == 0) // If name begins with prefix
        (*name_list).push_back(names[i]);
}

这适用于小向量。在上面的示例中,输出将是["ab","abs"] 我的问题是,当names 中有数百万个字符串时,这是否是最有效的算法。如果不是,还有哪些算法可以使用?

【问题讨论】:

  • 为了节省一些内存,您可以将字符串读入 trie
  • 我觉得使用后缀数组可以减少比较次数。

标签: c++ string vector substring prefix


【解决方案1】:

std::set&lt;std::string&gt;::lower_bound(prefix)返回的迭代器开始,线性向前搜索。

std::set<std::string> names {"ab","abs","act","add"};
std::string prefix = "ab";
auto itr = names.lower_bound(prefix);
while (itr != names.end() && !prefix.compare(*itr, 0, prefix.size())) {
     // matching string
     ++itr;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多