STL Multimap删除/删除值

时间:2010-01-22 07:10:08

标签: c++ stl

我有STL Multimap,我想从地图中删除具有特定值的条目,我不想删除整个密钥,因为该密钥可能映射到其他所需的值。

请帮助。

2 个答案:

答案 0 :(得分:16)

如果我理解正确,这些值可以出现在任何键下。如果是这种情况,您将不得不迭代多图并删除特定值。

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);
}

答案 1 :(得分:1)

从C ++ 11开始, std::multimap::erase 在最后一个被删除的元素之后返回一个迭代器。

因此,您可以稍微干净地重写Nikola的答案,而无需引入本地erase_iter变量:

UIAlertView

(另见this question的答案)