【发布时间】:2015-10-20 00:40:37
【问题描述】:
所以我有以下 lambda 函数来搜索字符串向量中的某个子字符串。
喜欢一些随机字符串"water" "attic" "cat" "pool"
我想返回所有包含"at" 的字符串
.
auto iter = std::find_if(myVector.begin(),
myVector.end(),
[subSequence](std::string s) -> bool { return (subSequence == s); });
if ( iter != myVector.end() ){
std::cout << *iter << "\n";
}
我的问题是,将其扩展到循环遍历我的整个向量的最佳方法是什么?我是新手,我尝试过的一切都不起作用。这是否可行,还是我需要考虑另一种方法?
【问题讨论】:
-
std::find_if只能用于容器的一个元素是什么意思?find_if正在遍历整个vector,但您在 lambda 中没有做任何有意义的事情。你可能想要[&subSequence](std::string const& s) { return s == subSequence; }之类的东西。 -
您的代码没有意义,
subSequence == subSequence将始终返回true。根据您搜索容器的频率,您可能需要考虑使用unordered_set或unordered_multset。 -
我猜您正在寻找方法来返回满足您的条件的序列的多个元素。你可能想看看lower_bound,upper_bound,equal_range,这里解释了stackoverflow.com/questions/23554509/…
标签: c++ loops c++11 vector stl