【问题标题】:Converting a map of pointers to map of of objects将指针映射转换为对象映射
【发布时间】:2014-03-28 14:27:09
【问题描述】:

我有一个映射,它有指向对象的指针作为键(值是 int)。鉴于此,我想创建一个与原始地图相同的地图,但我希望键是相应的对象(也就是取消引用的键)

这是我的代码:

map<const Point*, int> m1 = createMap();
map<Point,int> temp;
for_each(q.begin(), q.end(), [&temp](pair<const Point*, int> p){temp.insert(make_pair(*(p.first),p.second));});

我想要做的是调用一个简单地取消引用初始映射键的 lambda。

但是编译器会抱怨“/usr/include/c++/4.8/bits/stl_function.h|235|error: no match for 'operator

我是不是在某个地方犯了一个愚蠢的错误?

【问题讨论】:

  • 您的 Point 结构是否定义了“
  • 注意:地图不会“相同”:(1) 生成的地图可能有不同的顺序。 (2) 生成的地图可能有更少的元素(可能有两个指向同一点的指针)
  • 嗯。有没有办法避免(2)的情况?大图是我的算法(函数)返回第一个地图。为了测试它的输出,虽然我需要一个对象映射(不是指针)。
  • @Dieter 相同的指针只会在地图中分配一个元素,不是吗?如果是这样,两个地图将具有相同数量的元素。第 (1) 点仍然正确。
  • @DrD 我的意思是:指向两个点(在不同地址)的指针,其中点值相同

标签: c++ map stl lambda


【解决方案1】:

你必须为你的类 Point 定义 operator。

地图是元素的有序集合。因此,您需要实现一个功能来订购它们。默认情况下,该函数是 operator,但您可以根据需要在构造函数中指定不同的。

这里举例:

http://www.cplusplus.com/reference/map/map/

【讨论】:

  • 糟糕!我忘记了地图键是排序容器。 C++新手。谢谢。
  • 你知道怎么做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 2013-05-30
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多