何よりもまず、文字列を捨てて 2 つの int を使用します。木がスパース行列を実装する最良の方法であることを理解してくれてありがとう。通常、悪い実装の磁石のようです。
参考までに、トリプル複合キーも機能します。ペアのペアも想定しています。
ただし、見苦しい添え字が作成されるため、マクロのちょっとした魔法で作業が楽になります。これは一般的な目的の 1 つとして残しましたが、特定のマップ用のマクロを作成する場合は、マクロ内の引数を型キャストすることをお勧めします。はTresKey12
テスト済みで、正常に動作しています。QuadKeys
も動作するはずです。
注: キー パーツが基本的なデータ型である限り、それ以上記述する必要はありません。別名、比較関数について心配する必要はありません。STL で対応できます。コーディングしてリッピングするだけです。
using namespace std; // save some typing
#define DosKeys(x,y) std::make_pair(std::make_pair(x,y))
#define TresKeys12(x,y,z) std::make_pair(x,std::make_pair(y,z))
#define TresKeys21(x,y,z) std::make_pair(std::make_pair(x,y),z))
#define QuadKeys(w,x,y,z) std::make_pair(std::make_pair(w,x),std::make_pair(y,z))
map<pair<INT, pair<ULLNG, ULLNG>>, pIC_MESSAGE> MapMe;
MapMe[TresKey12(Part1, Part2, Part3)] = new fooObject;
誰かが私に感銘を与えたい場合はTresKeys
、入れ子のペアに依存しないための比較演算子を作成する方法を教えてください。これstruct
により、3つのメンバーを持つ単一を使用し、比較関数を使用できます。
PS: TresKey12 は、x,pair を作成するため、pair,z として宣言されたマップで問題を引き起こしました。DosKeys や QuadKeys では問題ありません。暑い夏の金曜日の場合、DosEquis を入力すると予期しない副作用が発生する可能性があります...うーん. DosKeys を何度も入力すると、メキシコのビールが渇きます。買い手責任負担。シェルドン・クーパーが言うように、「気まぐれのない人生とは?」