介绍
你好!我正在编写一个在非平凡空间中运行的模拟。该系统在中心原点周围占据了不确定的空间。现在,我正在实现一个 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
}
}
}
这是我的第一个问题,我已经尝试遵守规则。如果我做错了什么,请支持,我会尽我所能把事情整理好。谢谢你的支持!