Heim >Backend-Entwicklung >C++ >So durchsuchen Sie Vektoren von Strukturen basierend auf internen Eigenschaften: Eine Anleitung zu std::find_if
Suchen von Vektoren von Strukturen mit std::find
Bei der Arbeit mit Vektoren komplexer Datenstrukturen wie Strukturen ist die integrierte std::find reicht nicht mehr aus, wenn Sie nach bestimmten Elementen anhand ihrer internen Eigenschaften suchen müssen. Anhand eines einfachen Beispiels untersuchen wir, wie diese Einschränkung überwunden werden kann.
Betrachten Sie die folgende Struktur:<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>Nehmen wir an, Sie haben einen Vektor dieser
Monster mit dem Namen bot.monsters. Um nach einem Monster mit einer bestimmten ID zu suchen, könnten wir std::find verwenden, aber da die ID ein Mitglied der Struktur monster ist, müssen wir der Funktion mitteilen, wie das geht darauf zugreifen.
Die Funktionstd::find_if bietet eine Möglichkeit, benutzerdefinierte Kriterien anzugeben. Wir können eine Lambda-Funktion definieren, die die ID von jedem Monster extrahiert und sie mit unserer Ziel-ID vergleicht:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>Diese Lambda-Funktion filtert effektiv den Vektor, iteriert durch jedes Monster und gibt true zurück, wenn seine ID mit der übereinstimmt angegebene
currentMonster ID.
Wenn Sie keinen Zugriff auf die Boost-Bibliothek haben, können Sie Ihr eigenes Funktionsobjekt schreiben:<code class="cpp">struct find_id : std::unary_function<monster, bool> { DWORD id; find_id(DWORD id):id(id) { } bool operator()(monster const& m) const { return m.id == id; } }; it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>Dieses benutzerdefinierte Funktionsobjekt ermöglicht uns, die gleiche Suche durchzuführen, aber ohne die Notwendigkeit von Boost.Durch die Verwendung von
std::find_if und einem benutzerdefinierten Kriterium können wir Vektoren komplexer Datenstrukturen basierend auf ihren Kriterien effektiv durchsuchen spezifische Mitgliedswerte, die eine größere Flexibilität bei der Datenbearbeitung bieten.
Das obige ist der detaillierte Inhalt vonSo durchsuchen Sie Vektoren von Strukturen basierend auf internen Eigenschaften: Eine Anleitung zu std::find_if. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!