【问题标题】:How to access const map's keys and values?如何访问 const map 的键和值?
【发布时间】:2021-10-11 06:35:01
【问题描述】:

在将m2 的元素添加到m1 时,如果m1m2 具有相同的键,我尝试删除m2 对。如果没有const,它可以正常工作,但由于有const,它无法访问。请让我知道问题所在。

void mergeContainers(map<int, int>& container1, const map<int, int>& container2)
{

  for (map<int, int>::iterator it1 = container1.begin(); it1 != container1.end(); it1++)
  {
    for (map<int, int>::iterator it2 = container2.begin(); it2 != container2.end(); it2++)
    {
      if (it1->first == it2->first)
      {
        container2.erase(it2);
      }
    }
  }
  container1.insert(container2.begin(), container2.end());
}

【问题讨论】:

  • 如果container2const,您将无法调用container2.erase(it2)。那就是修改container2,句号。
  • 旁注:使用autorange-based-for 可以大大简化代码。
  • 您还需要小心循环,在循环中迭代容器时会对其进行变异。在map 的情况下erase 不会做诸如使过去的迭代器无效之类的事情,但总的来说这是一种危险的做法。您可以将整个内部循环替换为container2.erase(it1-&gt;first);
  • 改为 ... if (it1->first != it2->first) { container1.insert(*it2); }
  • 感谢所有回答!由于我是一个不会说英语的人,我的英语一定很差。我只是误解了作业

标签: c++ constants


【解决方案1】:

如果您的编译器支持 C++17。合并操作是地图容器的成员。

m_1.merge(m_2);

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多