如何从 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::map
或 std::unordered_map
,并反转键和值。 (键 = string
和值 = double
)。
插入时,检查要插入的值是否大于映射中的值,如果不是,则不要插入。
如果不能替换multimap,可以用上面的方法做一个临时map,清空multimap,把临时map的内容插回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::map
或 std::unordered_map
,并反转键和值。 (键 = string
和值 = double
)。
插入时,检查要插入的值是否大于映射中的值,如果不是,则不要插入。
如果不能替换multimap,可以用上面的方法做一个临时map,清空multimap,把临时map的内容插回multimap。