檢查字符串的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