Elemente in Vektoren von Strukturen mit std::find finden
Die Suche nach bestimmten Elementen innerhalb eines Vektors kann eine Herausforderung sein, insbesondere wenn es um die Suche nach bestimmten Elementen in einem Vektor geht benutzerdefinierte Strukturen. Diese Frage untersucht einen effizienten Ansatz zum Auffinden eines Elements in einem Strukturvektor, indem eine bestimmte Mitgliedsvariable als Ziel ausgewählt wird.
Betrachten Sie das bereitgestellte Strukturmonster mit verschiedenen Attributen. Das Ziel besteht darin, innerhalb eines Vektormonsters nach einem Monster mit einem bestimmten ID-Wert zu suchen. Die Standardfunktion std::find allein reicht für diese Aufgabe nicht aus, da sie die gesamte Struktur und nicht einzelne Mitgliedsvariablen vergleicht.
Um diese Einschränkung zu überwinden, besteht eine Lösung darin, die Funktion std::find_if zu verwenden. std::find_if verwendet ein Prädikat als dritten Parameter und ermöglicht so benutzerdefinierte Vergleichskriterien. In diesem Fall würde das Prädikat die ID-Mitgliedsvariable jedes Monsters im Vektor überprüfen.
Der folgende Codeausschnitt zeigt, wie man std::find_if mit einer Boost-Bibliotheksfunktion verwendet:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
Wenn Sie keinen Zugriff auf Boost haben, können Sie Ihr benutzerdefiniertes Funktionsobjekt definieren, um das gleiche Ergebnis zu erzielen:
<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>
Diese Lösungen durchlaufen effektiv den Vektor und vergleichen die ID-Mitgliedsvariable jedes Monsters mit der Ziel-ID und gibt einen Iterator zurück, der auf das passende Element zeigt, falls es gefunden wird.
Das obige ist der detaillierte Inhalt vonWie kann man mithilfe bestimmter Mitgliedsvariablen effizient Elemente in einem Strukturvektor finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!