Вы можете использовать алгоритм std::find_if
для обхода элементов и проверки необходимого вам условия.
Примечание; код здесь предполагается, что вы хотите найти элемент в векторе, где первый элемент кортежа является 0.
#include <tuple>
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
using namespace std;
vector<tuple<int, int, int, int>> v;
v.emplace_back(0,1,2,3);
auto it = find_if(begin(v), end(v), [](decltype(*begin(v)) e) {
return get<0>(e) == 0;
});
if (it != end(v))
cout << get<0>(*it) << " " << get<1>(*it);
}
std::find_if
выше использует форму, которая принимает предикат;
template< class InputIt, class UnaryPredicate >
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
И он возвращается;
Возвращает [итератор] первый элемент в диапазоне [first, last)
, который удовлетворяет определенным критериям ...
более краткий синтаксис, который может быть использован, но требует поддержки языка для C++ 14 и далее;
find_if(begin(v), end(v), [](auto&& e) { return get<0>(e) == 0; });
Это положение, которое оно предоставляет мне или ?, так как вы используете авто? – Lamda
'it' - это итератор, он либо указывает на найденное значение, либо' v.end() ', если не найден, следовательно, тест' if (it! = V.end()) '. – dkg
@Lamda Как правило, если вы не знаете, что такое фактический тип при использовании auto, посмотрите на контекст. Здесь я сравниваю его с «v.end()», поэтому он должен быть итератором. Если все еще не уверены, проверьте подпись функции :). Я слышал, что такая жалоба на автоматическое создание кода неясно все время, но если вы знаете контекст, это не так уж плохо :) – Arunmu