проверка набора значений в векторе

У меня есть набор чисел:

{2, 6, 8}

Я хотел бы проверить, если любой из этих чисел в моем векторе:

std::vector<int> myVector;

Я знаю, что могу проверить для каждого индивидуально, используя алгоритм std :: find:

auto iter1 = std::find(myVector.begin(), myVector.end(), 2);
auto iter2 = std::find(myVector.begin(), myVector.end(), 6);
auto iter3 = std::find(myVector.begin(), myVector.end(), 8);

if(iter1 != myVector.end() || iter2 != myVector.end() || iter3 != myVector.end())
std::cout << "A desired value was found in the vector!"

В этом примере есть только три числа, но реальный набор чисел будет больше. Кроме того, это кажется утомительным. Есть ли лучшее решение?

1

Решение

Ты можешь использовать std::find_first_of:

std::vector<int> myVector = /* something */;
std::vector<int> values = {2, 6, 8};
auto first_found = std::find_first_of(std::begin(myVector), std::end(myVector),
std::begin(values), std::end(values));
if (first_found != std::end(myVector)) {
// Found one of them!
}
4

Другие решения

Если вы хотите проверить, включен ли номер в «набор», используйте std::set

std::set<int> myset = {3,4,6,34,2,6,78,8,5,0};
if (myset.count(5) > 0) {
std::cout << "Hooray!" << std::endl;
}
0

По вопросам рекламы [email protected]