我偶然发现了一个关于地图无法解决的问题。我们知道,地图需要它要处理的两种类型的变量,即地图,但是自定义类型呢?
假设我有一个名为'Point'的对象,它包含两个变量x和y。声明地图是否可行:map?。请看下面的代码
class Point
{
public:
double x;
double y;
Point(double x, double y)
{
this->x=x;
this->y=y;
}
};
int main(int argc, const char * argv[])
{
map<Point,int> myMap;
Point p1(0,0);
myMap[p1]=1;
}
我收到一个编译错误:'二进制表达式的操作数无效('const Point'和'const Point')。
有谁知道为什么会这样,我该如何解决?任何帮助将非常感激:)。
干杯!
答案 0 :(得分:2)
您需要为operator<
提供Point
。 std :: map在内部调用operator<
来排序密钥。
bool operator<(const Point& lhs, const Point& rhs)
{
// compares lhs.x to rhs.x,
// then lhs.y to rhs.y
return std::tie(lhs.x, lhs.y) < std::tie(rhs.x, rhs.y);
}
请参阅map,从模板参数中获取Compare
函数,std::less<key>
为默认值。
std::map
是一个已排序的关联容器,包含具有唯一键的键值对。 使用比较功能比较对键进行排序。搜索,删除和插入操作具有对数复杂性。地图通常实现为红黑树