0

我正在使用 std::map 来存储某些对象。地图有模板<Coordinate, Object>。现在,我注意到地图将坐标转换为整数,然后基于此为元素提供唯一键。(等于那个整数)

现在,问题是不可能将 3 维整数 (x, y, z) 转换为 std::map 可以使用的单个整数。

std::map 有哪些替代方案需要密钥对象是唯一的,但不需要将其转换为整数(或字符串等)?

4

1 回答 1

2

您可以使用 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;
于 2013-07-28T19:27:38.043 回答