C ++:搜索以给定前缀开头的字符串数组

时间:2014-02-27 01:14:07

标签: c++ string vector substring prefix

假设我有一个字符串向量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已经让数百万字符串在其中,这是最有效的算法。如果没有,可以使用哪些其他算法?

1 个答案:

答案 0 :(得分:0)

std::set<std::string>::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;
}