检查字符串的stl向量是否包含 特定字符串的最有效方法是什么?检查字符串是否作为向量中的元素存在
回答
明显但可能过于缓慢的解决方案是std::find(vec.begin(), vec.end(), your_string);
如果你的载体没有太大变化,但排序第一,然后用binary_search
,lower_bound
,upper_bound
,或equal_range
。如果您的矢量变化很大,请考虑使用set
/multiset
(或者如果需要,请使用map
/multimap
)。
根据您的需要,散列(unordered_set
)可能也适合,但它与您的初始容器选择比正常排序的容器更大的不同,并且不在C++ 0x之前提供(您可以轻松获得它)。
或者'multiset'如果该值可能存在多次。 – Will 2011-03-30 17:24:49
速度更快的可能是散列表或前缀树(又名trie)。前者或多或少是标准的:C++ 0x中的'unordered_set'(Boost中也可用)或老派STL中的'hash_set'。你可能需要编写你自己的版本,或者寻找一个好的实现。 – 2011-03-30 17:29:39
使用std :: find查找字符串。
std::find(stringVector.begin(), stringVector.end(), "specificStringToFind") ;
vector<string> v;
vector<string>::iterator it;
it = std::find(v.begin(), v.end(), "stringToFind");
使用std::find
找到目标字符串。这是一个线性搜索,所以要小心搜索大型矢量。
要了解向量包含目标与否,使用:
bool isPresent = (std::find(vec.begin(), vec.end(), target) != vec.end());
这里是一个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;}
- 1. 检查字符串矢量是元素
- 2. 检查向量中是否存在元素R
- 3. 如何检查查询字符串中是否存在使用javascript的元素?
- 4. 查找向量<string>中的所有元素是否在字符串中
- 5. R:检查一个向量的多个元素是否出现在字符串向量中
- 6. python:检查子字符串是否在字符串元组中
- 7. 检查字符串数组中是否存在字符串XSL
- 8. 检查字符串元素是否存在于使用Python的列表中?
- 9. 检查字符串变量是否为某个字符串值
- 10. 查找字符串是否存在于结构向量中
- 11. C++检查向量a是否包含向量b的元素
- 12. 如何检查常量中是否存在字符串
- 13. 检查Selenium中是否存在元素
- 14. 检查DOM中是否存在元素
- 15. 在向量中查找唯一一组字符串,其中向量元素可以是多个字符串
- 16. Julia:检查一个向量中的元素是否在另一个向量中
- 17. 检查字符串是否包含列表中的元素并存储它
- 18. R:找向量的字符串作为元素的多个字符串
- 19. 检查向量元素是否在列表的相应元素中
- 20. 如何检查字符串的向量是否平衡?
- 21. 检查href是否存在jQuery中的查询字符串
- 22. 检查ArrayList元素是否存在
- 23. 检查数组元素是否存在
- 24. 检查一个元素是否存在
- 25. 检查DIV内是否存在元素
- 26. 如何检查元素是否存在?
- 27. JAXB - 检查是否存在子元素
- 28. jQuery检查元素是否存在onClick
- 29. 检查元素是否存在
- 30. as3 xml检查元素是否存在
如果检查你的货柜物品的存在是你计划不得不经常做的事情,你可能要考虑使用一个std ::设置,而不是当然,你不想重复的(提供您的设置中的字符串)。 std :: set有一个find()方法,其平均复杂度保证为log(n)。 – Fred 2011-03-30 17:25:26