[英]C++: Searching an array of strings that begin with a given 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
包含数百万个字符串时,这是否是最有效的算法? 如果没有,可以使用什么其他算法?
从由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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.