Sie können den Algorithmus std::find_if
verwenden, um die Elemente zu durchlaufen und auf die von Ihnen gewünschte Bedingung zu testen.
Hinweis; der Code hier vorausgesetzt, dass Sie das Element in dem Vektor, bei dem das erste Elemente des Tupels 0 ist
#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
oben verwendet die Form finden möchten, die ein Prädikat akzeptiert;
template< class InputIt, class UnaryPredicate >
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
Und es gibt;
Returns [ein Iterator to] das erste Element im Bereich [first, last)
, die bestimmte Kriterien erfüllt, ...
Eine weitere terse Syntax, die verwendet werden können, erfordert aber Sprachunterstützung für C Ab 14 Uhr;
find_if(begin(v), end(v), [](auto&& e) { return get<0>(e) == 0; });
Ist es die Position, die es mir oder? Bietet, da Sie auto verwenden? – Lamda
'it' ist ein Iterator, es zeigt entweder auf den gefundenen Wert oder' v.end() 'falls nicht gefunden, daher der Test' if (it! = Vend()) '. – dkg
@Lamda Als allgemeine Empfehlung, wenn Sie nicht sicher sind, was der tatsächliche Typ ist, wenn Sie Auto verwenden, suchen Sie nach dem Kontext. Hier vergleiche ich es mit 'v.end()', also muss es ein Iterator sein. Wenn Sie sich noch nicht sicher sind, überprüfen Sie die Signatur der Funktion :). Ich höre solche Klagen darüber, dass Auto-Code die ganze Zeit unklar ist, aber wenn du den Kontext kennst, ist es nicht so schlimm :) – Arunmu