自定义类型内部映射参数

时间:2013-10-09 20:49:08

标签: c++ map custom-type

我偶然发现了一个关于地图无法解决的问题。我们知道,地图需要它要处理的两种类型的变量,即地图,但是自定义类型呢?

假设我有一个名为'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')。

有谁知道为什么会这样,我该如何解决?任何帮助将非常感激:)。

干杯!

1 个答案:

答案 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是一个已排序的关联容器,包含具有唯一键的键值对。 使用比较功能比较对键进行排序。搜索,删除和插入操作具有对数复杂性。地图通常实现为红黑树