Beim Durchsuchen eines Vektors mit benutzerdefinierten Strukturen können Schwierigkeiten beim Isolieren und Durchlaufen bestimmter Elemente auftreten. In diesem Artikel wird eine Lösung für dieses Problem mithilfe der Standardbibliotheksfunktionen von C untersucht.
Problem:
Betrachten Sie die folgende Struktur:
<code class="cpp">struct monster { DWORD id; int x; int y; int distance; int HP; };</code>
Einen Vektor dieser Strukturen erstellen:
<code class="cpp">std::vector<monster> monsters;</code>
Sie möchten anhand seines Vektors nach einem bestimmten Monster innerhalb des Vektors suchen id-Element.
Lösung:
Um nach einem Element basierend auf einem bestimmten Feld zu suchen, verwenden Sie die Funktion std::find_if anstelle von std::find. Mit std::find_if können Sie eine Prädikatfunktion angeben, die die Elemente des Vektors filtert.
Hier sind zwei Möglichkeiten, dies mit std::find_if zu erreichen:
1. Verwenden von Boost-Bibliotheken:
Wenn Sie über Boost-Bibliotheken verfügen, können Sie den folgenden Code verwenden:
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), boost::bind(&monster::id, _1) == currentMonster);</code>
2. Erstellen eines benutzerdefinierten Funktionsobjekts:
Wenn Sie Boost nicht haben, erstellen Sie ein benutzerdefiniertes Funktionsobjekt wie folgt:
<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; } };</code>
Verwenden Sie dann dieses Funktionsobjekt in std::find_if :
<code class="cpp">it = std::find_if(bot.monsters.begin(), bot.monsters.end(), find_id(currentMonster));</code>
Dadurch wird der Monstervektor durchlaufen und nach dem Monster mit der angegebenen ID gesucht. Der von std::find_if zurückgegebene Iterator kann dann verwendet werden, um auf das gefundene Monster zuzugreifen.
Das obige ist der detaillierte Inhalt vonWie kann man mit C effizient bestimmte Monster in einem Strukturvektor finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!