我有一个映射,它具有指向对象的指针作为键(值为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:'operator <'(操作数类型是'const Point'和'const Point')不匹配。 |”
我在某个地方犯了一个愚蠢的错误吗?
贵Point结构定义了 “<” 操作符?编译器知道如何比较指针,但它不知道如何比较两个用户定义的结构体或类,如果你没有为其定义一个运算符 – Gonmator
注意:地图不会是“相同的”:(1)最终的地图可能会有不同的顺序。 (2)由此产生的地图可能有更少的元素(可能有两个指向同一点的地图) –
嗯。有没有办法避免(2)的情况?大图是我的算法(函数)返回第一张地图。为了测试它的输出,虽然我需要一个对象的映射(而不是指针)。 –