如何从 multimap 中删除重复的字符串值

how to remove duplicate string values from multimap

我有一个 std::multimap,它有多个具有相同键和值的条目,我想删除所有重复值,只保留索引最高的那个。 到目前为止,我有这样的东西:

#include <iostream>
#include<iterator>
#include <map>


int main(void)
{

    std::multimap<double, std::string> m;

    m.insert(std::pair<double,std::string>(79.43567,"ARH1265"));
    m.insert(std::pair<double,std::string>(82.96567,"ARH1265"));
    m.insert(std::pair<double,std::string>(94.03261,"TE5748"));
    m.insert(std::pair<double,std::string>(73.53961,"TE5748"));
    m.insert(std::pair<double,std::string>(93.43567,"CRP5285"));

    std::cout << "size: " << m.size() << std::endl;

    std::multimap<double, std::string>::iterator it;
    for (it = m.begin(); i!=m.end(); i++) {
        // ???
    }
}

最后我想得到一张地图,其中包含三个条目:

82.96567, ARH1265
94.03261, TE5748
93.43567, CRP5285
{
    std::unordered_set<std::string> already_seen;
    for (it = m.begin(); i!=m.end(); i++) {
        if (already_seen.find(it->second) != already_seen.end())
             m.erase(it);
        else
            already_seen.insert(it->second);
    }
}

您还可以使用 stl 中的 std::remove_if 和 lambda 函数,如果您愿意进行试验

如果可以,请将 std::multimap 替换为 std::mapstd::unordered_map,并反转键和值。 (键 = string 和值 = double)。

插入时,检查要插入的值是否大于映射中的值,如果不是,则不要插入。

如果不能替换multimap,可以用上面的方法做一个临时map,清空multimap,把临时map的内容插回multimap。