【问题标题】:overwriting map with map possible with <algorithm>?<algorithm> 可以用地图覆盖地图吗?
【发布时间】:2015-07-08 06:55:59
【问题描述】:

我想执行以下操作,但似乎不可能。我不是 STL 方面的专家。

typedef std::map<int,int> CMap;

CMap m1;
m1[0] = 10;
m1[1] = 11;
m1[2] = 12;

CMap m2;
m2[20] = 30;
m2[21] = 31;
m2[22] = 32;

std::copy( m1.begin(), m1.end(), m2.begin() );

有没有办法使用算法 (C++98) 做到这一点?可以用 transform() 或 replace() 来完成吗?如果是,怎么做?

谢谢!

【问题讨论】:

  • 也许你可以使用std::inserter 作为最后一个参数?
  • @Morb:谢谢。 insert() 当然是可能的。我想知道是否也可以用算法做同样的事情。
  • @Joachim:谢谢。这是我没有考虑的一种方式。其实我没有具体说明我想做什么。我想让 m2 被 m1 覆盖。这也可能吗?
  • 最好在问题本身中澄清这一点。

标签: c++ dictionary stl copy transform


【解决方案1】:

你可以这样做:

m2 = m1;

如果你愿意,也可以这样:

m2.swap(m1);

还有这个:

std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()));

【讨论】:

  • 感谢您的回答。前两个覆盖很好,但第三个将按照我的理解附加。有没有办法使用 copy() 覆盖?
  • @Lorenz 如果您创建了自己的iterator,则可以使用std::copy() 覆盖,因为std::insert_iterator 只会在不存在值的情况下插入。 TBH,您不妨只编写一个循环,因为任何方法都至少需要您编写一个仿函数。如果你有 C++11 一个简单的基于范围的 for 循环就可以了:for(auto&amp;&amp; p: m1) m2[p.first] = p.second;
  • 感谢您的回答。没有想到可以写一个具体的迭代器。现在清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多