Проверка наличия строки в виде элемента в векторе

Какой наиболее эффективный способ проверить, содержит ли 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") ;