序章
こんにちは!自明ではない空間で動作するシミュレーションを書いています。このシステムは、中心の原点の周りに不確定な量のスペースを占有します。現在、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
}
}
}
これは私の最初の質問であり、ルールに従おうとしました。私が何か悪いことをした場合は、ご協力をお願いします。物事を整理するために最善を尽くします。ご協力ありがとうございました!