2014-03-28 83 views
0

我有一个映射,它具有指向对象的指针作为键(值为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')不匹配。 |”

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

+1

贵Point结构定义了 “<” 操作符?编译器知道如何比较指针,但它不知道如何比较两个用户定义的结构体或类,如果你没有为其定义一个运算符 – Gonmator

+0

注意:地图不会是“相同的”:(1)最终的地图可能会有不同的顺序。 (2)由此产生的地图可能有更少的元素(可能有两个指向同一点的地图) –

+0

嗯。有没有办法避免(2)的情况?大图是我的算法(函数)返回第一张地图。为了测试它的输出,虽然我需要一个对象的映射(而不是指针)。 –

回答

0

你必须定义运营商<为你的类点。

地图是元素的有序集合。因此你需要实现一个函数来订购它们。默认情况下,该函数是运算符<,但是如果需要,您可以在构造函数中指定一个不同的函数。

硒这里,例如:

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

+0

哎呀!我忘记了地图键是排序的容器。 C++新手。谢谢。 –

+0

你知道该怎么做吗? – DrD

+0

是的,我做到了。有效。 –