Проверка наличия строки как элемента в векторе - PullRequest
11 голосов
/ 30 марта 2011

Какой самый эффективный способ проверить, содержит ли вектор stl строк конкретная строка?

Ответы [ 5 ]

20 голосов
/ 30 марта 2011

Очевидное, но, возможно, слишком медленное решение: std::find(vec.begin(), vec.end(), your_string);

Если ваш вектор сильно не меняется, сначала отсортируйте его, затем используйте binary_search, lower_bound, upper_bound или equal_range.Если ваш вектор сильно меняется, попробуйте вместо этого использовать set / multiset (или, если необходимо, map / multimap).

В зависимости от ваших потребностей хеш (unordered_set) может бытьтакже подходит, но он больше отличается от вашего первоначального выбора контейнера, чем обычные заказанные контейнеры, и не поставляется до C ++ 0x (вы можете легко получить его из boost).

8 голосов
/ 30 марта 2011

Используйте std::find, чтобы найти целевую строку.Это линейный поиск, поэтому будьте осторожны при поиске больших векторов.

Чтобы узнать, содержит ли вектор цель или нет, используйте:

bool isPresent = (std::find(vec.begin(), vec.end(), target) != vec.end());
4 голосов
/ 01 сентября 2014

Вот альтернатива 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";});

Не стесняйтесь настраивать лямбда-функцию на то, что вы хотите, например,

[](std::string const& s) {return s.size()>3;}
3 голосов
/ 30 марта 2011
vector<string> v;
vector<string>::iterator it;
it = std::find(v.begin(), v.end(), "stringToFind");
0 голосов
/ 30 марта 2011

Используйте std :: find для поиска строки.

std::find(stringVector.begin(), stringVector.end(), "specificStringToFind") ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...