Какой наиболее эффективный способ проверить, содержит ли stl-вектор строк конкретная строка?
Проверка наличия строки в виде элемента в векторе
Ответ 1
Очевидным, но, возможно, слишком медленным решением является std::find(vec.begin(), vec.end(), your_string);
Если ваш вектор сильно не меняется, сначала отберите его, затем используйте binary_search
, lower_bound
, upper_bound
или equal_range
. Если ваш вектор сильно изменится, используйте вместо этого set
/multiset
(или, если необходимо, map
/multimap
).
В зависимости от ваших потребностей хеш (unordered_set
) также может быть уместным, но он больше отличается от вашего первоначального выбора контейнера, чем обычные упорядоченные контейнеры, и не предоставляется до С++ 0x (вы можете получить его от повышения легко).
Ответ 2
Используйте std::find
, чтобы найти целевую строку. Это линейный поиск, поэтому будьте осторожны при поиске больших векторов.
Чтобы узнать, содержит ли вектор цель или нет, используйте:
bool isPresent = (std::find(vec.begin(), vec.end(), target) != vec.end());
Ответ 3
Вот альтернатива С++ 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";});
Не забудьте настроить функцию лямбда на то, что вы хотите, например
[](std::string const& s) {return s.size()>3;}
Ответ 4
vector<string> v;
vector<string>::iterator it;
it = std::find(v.begin(), v.end(), "stringToFind");
Ответ 5
Используйте std:: find, чтобы найти строку.
std::find(stringVector.begin(), stringVector.end(), "specificStringToFind") ;