Mam STL Multimap, chcę usunąć wpisy z mapy, która ma określoną wartość, nie chcę usunąć całego klucza, ponieważ klucz ten może być odwzorowany na inne wartości, które są wymagane.STL Multimap Usuń/usuń wartości
proszę o pomoc.
Mam STL Multimap, chcę usunąć wpisy z mapy, która ma określoną wartość, nie chcę usunąć całego klucza, ponieważ klucz ten może być odwzorowany na inne wartości, które są wymagane.STL Multimap Usuń/usuń wartości
proszę o pomoc.
Jeśli dobrze rozumiem, wartości te mogą pojawić się pod dowolnym kluczem. W takim przypadku będziesz musiał powtórzyć multimap i usunąć określone wartości.
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// you have to do this because iterators are invalidated
Multimap::iterator erase_iter = iter++;
// removes all even values
if (erase_iter->second % 2 == 0)
data.erase(erase_iter);
}
Tak, masz rację, wartości mogą pojawić się pod dowolnym klawiszem. – Avinash
Dzięki to działa dla mnie, szukałem przy użyciu algorytmów remove_if. – Avinash
Obawiam się, że 'remove_if' from'
ponieważ C++ 11 std::multimap::erase powraca iterację po ostatniej usuniętego elementu.
Więc można przepisać odpowiedź Nikola nieznacznie bardziej gładko, bez konieczności wprowadzenia zmiennej lokalnej erase_iter:
typedef std::multimap<std::string, int> Multimap;
Multimap data;
for (Multimap::iterator iter = data.begin(); iter != data.end();)
{
// removes all even values
if (iter->second % 2 == 0)
iter = data.erase(iter);
else
++iter;
}
(Patrz również odpowiedzieć na this question)
Ewentualna poprawka może być do wymiany kluczy i wartości może to nie być opcja dla wszystkich czytających to, ale może być dla niektórych. – dangerousdave