Heim > Artikel > Backend-Entwicklung > Wie kann man mit C effizient bestimmte Monster in einem Strukturvektor finden?
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!