为什么在 C++ 中 find 比 starts_with 快?

问题描述 投票:0回答:0

我有一个 AAAAA 和 ZZZZZ 之间所有单词的列表。所以大约 1200 万个字符串。现在我想找到所有以给定后缀开头的字符串。这是我的代码:

for (const auto& str : list) {
        if (str.find(suffix) == 0) {
            result.push_back(str);
        }
}

有效,在我的机器上大约需要 200ms 才能完成。但它不是很聪明,因为 find 会找到任何子字符串,所以它总是搜索整个字符串,即使第一个字母与后缀不匹配。所以我用

str.starts_with(suffix)
替换了find,果然它起作用了。但在我的机器上需要 375ms。据我所知,它应该更快,或者至少不会慢很多。

谁能告诉我这种差异是从哪里来的?

c++ search
© www.soinside.com 2019 - 2024. All rights reserved.