C++ 如何删除多重映射c++;?
我有一个包含以下元素(键、值)的多重映射: 项目一 项目二,asdsa 项目三,你好 项目四,asdsa 我想删除具有相同值的multimap的所有元素,如示例中所示,键是否不同并不重要。在本例中,我需要删除projectone、projecttwo和projectfour,因为它们具有相同的值(asdsa)。。因此,打印多重贴图时的输出仅为:C++ 如何删除多重映射c++;?,c++,c++11,c++14,C++,C++11,C++14,我有一个包含以下元素(键、值)的多重映射: 项目一 项目二,asdsa 项目三,你好 项目四,asdsa 我想删除具有相同值的multimap的所有元素,如示例中所示,键是否不同并不重要。在本例中,我需要删除projectone、projecttwo和projectfour,因为它们具有相同的值(asdsa)。。因此,打印多重贴图时的输出仅为: 项目三,您好像这样的迭代方法可以解决您的问题 std::unordered_set<string> s; // to track the v
项目三,您好像这样的迭代方法可以解决您的问题
std::unordered_set<string> s; // to track the values seen so far.
for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
if (s.find(it->second) != s.end())
{
m.erase(it++); // or "it = m.erase(it)" since C++11
}
else
{
s.emplace(it->second);
++it;
}
}
std::无序的集合;//跟踪到目前为止看到的值。
对于(自动it=m.cbegin();it!=m.cend()/*未提升*/;/*无增量*/)
{
如果(s.find(it->second)!=s.end())
{
m、 erase(it++);//或“it=m.erase(it)”从C++11开始
}
其他的
{
s、 安置(it->second);
++它;
}
}
地图未针对基于值的操作进行优化。由于在任何情况下都会有O(n)复杂度,因此最直接的方法是迭代映射并删除具有此值的项。我不确定,但是删除\u如果也可以工作:嗨,劳尔!我们需要一个代码示例。如果有疑问,请选中@dyukha remove_if,因为它不适用于(无序的)关联容器,因为它会变异元素