2

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

假设我有一个名为“Point”的对象,它包含两个变量 x 和 y。声明这样的地图是否可行:地图?请看下面的代码

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')。

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

干杯!

4

1 回答 1

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

于 2013-10-09T20:50:13.800 回答