einzelne Elemente in verschachtelter Map löschen



  • Hallo Leute,

    ich möchte aus meiner verschachtelten Map alle Punkte löschen, die die Koordinaten 0,0 haben. ich hab mir folgenden Code ausgedacht, doch irgendwie löscht der nicht die einzelnen Punkte sondern Komplette Reihen.

        for(std::map<int,std::map<int,cv::Point>>::const_iterator i = m_Points.begin(); i!= m_Points.end();i++) {
    
            for(std::map<int,cv::Point>::const_iterator j =  i->second.begin(); j != i->second.end(); j++){
    
                if(j->second.x == 0 && j->second.y == 0){
    
                    m_Points.erase(j->first);
                }
            }
        }
    

    Eine weiter Idee war

    m_Points[i->first].erase(j->first);
    

    aber geht auch nicht.

    Hat jemand eine Tipp ?

    Gruß



  • Generell:

    for (auto &outerPair : m_Points) {
        auto &innerMap = outerPair.second;
        for (auto it = innerMap.cbegin(); it != innerMap.cend(); /* nix */) {
            if (it->second.x == 0 && it->second.y == 0) {
                innerMap.erase(it++);
            } else {
                ++it;
            }
        }
    }
    

    Diese innere for-Loop könntest du auch in einen Algortithmus wie erase_values_from_map oder so kapseln.
    Der Trick ist, dass man über alle Elemente nur 1x loopt, daher beim Erasen sich den Iterator erst merkt, dann inkrementiert und dann den gemerkten Iterator löscht.



  • @wob Danke!

    Ich habs verstanden - super ! Du hast mir sehr geholfen

    Gruß


Log in to reply