介绍
你好!我正在编写一个在非平凡空间中运行的模拟系统。该系统占据了以原点为中心的一定数量的空间。当前,我正在实现一个xy点类“Pos”,用于连接我的坐标并作为容器的键(包含有限数据块)。我希望原点周围的数据在内存中具有空间上的连贯性。
我为这个问题的目标是编写一个std::less(小于号)的专业化,如果(整数)位置被插入到地图中,它们将按照逆时针顺序排序。
我想象一下单元格:
4 3 2
5 0 1
6 7 8 9
会变成
0, 1, 2, 3, ...。
问题
我该如何理解编写std::less,以便像这样缠绕我的点?我如何理解解决方案遵循严格弱排序并避免其他陷阱?最后,您会如何使用C++11中可用的工具来处理或编写此功能?
(如果对于我的目的,使用无序地图并通过动态原点周围的边界框进行线性迭代是更灵活和有效的解决方案,则可以编写该方法的实现,但我不会将其标记为最佳答案。)
附言
我一直在通过实现天真的尝试学习,但我相信通过讨论和深入解释对我自己来说会更好。
这是上下文的快照。
struct Pos
{
short x;
short y;
Pos(short x, short y);
Pos(const Pos& p);
void operator=(const Pos& p);
~Pos() = default;
};
namespace std {
template<> struct less<Pos> {
bool operator()(const Pos& p1, const Pos& p2) const {
//Implementation
}
}
}
这是我的第一个问题,我已经尽力遵守规则。如果我有什么做错了的地方,请给予支持,我会尽力整理好。感谢您的支持!