Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何删除多重映射c++;?_C++_C++11_C++14 - Fatal编程技术网

C++ 如何删除多重映射c++;?

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

我有一个包含以下元素(键、值)的多重映射:

项目一

项目二,asdsa

项目三,你好

项目四,asdsa

我想删除具有相同值的multimap的所有元素,如示例中所示,键是否不同并不重要。在本例中,我需要删除projectone、projecttwo和projectfour,因为它们具有相同的值(asdsa)。。因此,打印多重贴图时的输出仅为:


项目三,您好

像这样的迭代方法可以解决您的问题

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,因为它不适用于(无序的)关联容器,因为它会变异元素