【发布时间】:2015-12-20 13:30:27
【问题描述】:
我想知道 std::less 如何在没有特定 operator < 关联的键的映射中工作。
更具体地说,我正在使用两个库,每个库在 3D 空间中都有自己特定的点实现:
class Lib1Point
{
public:
double x;
double y;
double z;
// ctors, dtor and lots of fancy methods, but no further data members
};
class Lib2Point
{
private:
double coords[3];
public:
// lots of other fancy methods, but also no further data members
};
这两个类都没有定义operator <。
class SomeData;
std::map<Lib1Point, SomeData> m_pointData1;
std::map<Lib2Point, SomeData> m_pointData2;
这两个映射如何对它们的键进行排序?点会按相同的顺序排序吗?我可以以某种方式信任此顺序还是特定于编译器?如果我不能信任它,在没有访问点类源代码的情况下强制执行特定顺序的最简单方法是什么?
【问题讨论】:
-
如果我没记错的话,这些容器根本不会对它们的键进行排序。除非您定义一个,否则没有明显的方法可以对 3D 点进行排序。
-
您可以在
std::map提供您自己的比较器
标签: c++ sorting dictionary key operator-overloading