我正在使用 std::map 来存储某些对象。地图有模板<Coordinate, Object>
。现在,我注意到地图将坐标转换为整数,然后基于此为元素提供唯一键。(等于那个整数)
现在,问题是不可能将 3 维整数 (x, y, z) 转换为 std::map 可以使用的单个整数。
std::map 有哪些替代方案需要密钥对象是唯一的,但不需要将其转换为整数(或字符串等)?
您可以使用 aCoordinate
作为地图的键。您只需为其定义严格的弱排序(类似于小于或大于比较)。你如何做到这一点取决于你,但你可以,例如,使用 3 个坐标执行字典比较:
#include <tuple> // for std::tie
struct Coordinate
{
double x, y, z;
....
bool operator<(const Coordinate& rhs) const
{
return std::tie(x, y, z) < std::tie(rhs.x, rhs.y, rhs.z);
}
};
在这里,这是通过实现 les-than 运算符来完成的Coordinate
,但您也可以定义一个仿函数并使用它来构造映射:
struct Comp
{
bool operator()(const Coordinate& lhs, const Coordinate& rhs) const
{
return std::tie(lhs.x, lhs.y, lhs.z) < std::tie(rhs.x, rhs.y, rhs.z);
}
};
然后
std::map<Coordinate, ValueType, Comp> m;