检查字符串是否作为向量中的元素存在

时间:2011-03-30 17:17:32

标签: c++ vector

检查字符串的stl向量是否包含的最有效方法是什么 一个特定的字符串?

5 个答案:

答案 0 :(得分:20)

明显但可能太慢的解决方案是std::find(vec.begin(), vec.end(), your_string);

如果您的向量变化不大,请先对其进行排序,然后使用binary_searchlower_boundupper_boundequal_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") ;