Heim >Backend-Entwicklung >C++ >Wie kann man mithilfe bestimmter Mitgliedsvariablen effizient Elemente in einem Strukturvektor finden?

Wie kann man mithilfe bestimmter Mitgliedsvariablen effizient Elemente in einem Strukturvektor finden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 08:29:30651Durchsuche

How to Efficiently Find Elements in a Vector of Structs Using Specific Member Variables?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn