Heim >Backend-Entwicklung >C++ >Wie entferne ich Elemente aus einer C-Standardkarte basierend auf einer Bedingung?

Wie entferne ich Elemente aus einer C-Standardkarte basierend auf einer Bedingung?

Susan Sarandon
Susan SarandonOriginal
2024-12-02 17:31:14422Durchsuche

How to Remove Elements from a C   Standard Map Based on a Condition?

Äquivalent von Remove-If für Standardkarten

Frage:

In C, wie Kann ich mithilfe der STL eine Reihe von Elementen basierend auf einer angegebenen Bedingung aus einer Karte entfernen? Algorithmus?

Antwort:

Während der Algorithmus „remove_if“ nicht auf assoziative Container wie Karten anwendbar ist, gibt es einen gleichwertigen Ansatz mit Iteratoren. So können Sie es machen:

bool predicate(const std::pair<int, std::string>& x) {
    return x.first > 2;
}

int main() {
    std::map<int, std::string> aMap;

    // Populate the map...

    std::map<int, std::string>::iterator iter = aMap.begin();
    std::map<int, std::string>::iterator endIter = aMap.end();

    for (; iter != endIter;) {
        if (predicate(*iter)) {
            // Here, increment iter after erasing
            iter = aMap.erase(iter);
        } else {
            ++iter;
        }
    }
}

Erklärung:

  • Der Code verwendet eine Schleife, um die Karte zu durchlaufen.
  • Wenn ein Element die Bedingung erfüllt, wird der Iterator erhöht, nachdem dieses Element mithilfe der Löschfunktion gelöscht wurde Methode.
  • Dies verhindert das Überspringen von Elementen, die gelöscht werden sollten.
  • Das Aktualisieren des Iterators nach dem Löschen stellt sicher, dass die Schleife korrekt fortgesetzt wird, da Iteratoren nach dem Löschen eines Elements möglicherweise ungültig werden.

Das obige ist der detaillierte Inhalt vonWie entferne ich Elemente aus einer C-Standardkarte basierend auf einer Bedingung?. 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