检查字符串的stl向量是否包含的最有效方法是什么 一个特定的字符串?
答案 0 :(得分:20)
明显但可能太慢的解决方案是std::find(vec.begin(), vec.end(), your_string);
如果您的向量变化不大,请先对其进行排序,然后使用binary_search
,lower_bound
,upper_bound
或equal_range
。如果您的向量发生了很大变化,请考虑使用set
/ multiset
(或者如果需要map
/ multimap
)。
根据您的需要,散列(unordered_set
)也可能是合适的,但它与初始容器选择的区别比正常的有序容器更多,并且不是在C ++ 0x之前提供的(你可以得到它)从容易提升。)
答案 1 :(得分:8)
使用std::find
查找目标字符串。这是一个线性搜索,所以要小心搜索大型矢量。
要确定向量是否包含目标,请使用:
bool isPresent = (std::find(vec.begin(), vec.end(), target) != vec.end());
答案 2 :(得分:4)
这是C ++ 11的替代方案:
#include<functional>
#include<vector>
#include<string>
std::vector<std::string> v;
bool elementFound = std::any_of(v.begin(), v.end(), [](std::string const& s) {return s=="string-to-search";});
随意将lambda函数调整为您想要的值,例如
[](std::string const& s) {return s.size()>3;}
答案 3 :(得分:3)
vector<string> v;
vector<string>::iterator it;
it = std::find(v.begin(), v.end(), "stringToFind");
答案 4 :(得分:0)
使用std :: find查找字符串。
std::find(stringVector.begin(), stringVector.end(), "specificStringToFind") ;