私は次の選択肢を検討します:
オプションSTDと1
のstd ::マップ::ペア値としてキーとタイプ3のように<タイプ1、タイプ2>
std::map< std::pair< Type1, Type2 >, Type3 > data;
オプション2
2次元のstd ::ベクトルグラフまたは直交座標空間モデリングする際のType1とType2のは、あなたが見つけるかもしれないとして、整数である場合には
: のstd ::ベクトル<のstd ::ベクトル<タイプ3を>>データ;
オプションタイプ3にマッピングすることができますタイプ1とタイプ2を含む3
ユーザー定義クラス、
あなたがこれまで以上の値を使用して二つのタイプを飾るしたい場合があります場合は、あなたが可能性あなたのタイプの両方を含むクラスを定義し、第三のタイプにマッピングするのstd ::マップを使用します。
public:
MyClass(Type1 x, Type2 y) : x_(x), y_(y)
Type1 x() const {
return x_;
}
Type2 y() const {
return y_;
}
private:
Type1 x_;
Type2 y_;
};
std::map< MyClass, Type3 > data;
オプション1の利点は、それがあるということです本当に速くて簡単にコーディングすることができ、C++を知っている人にとっては意味があるはずです。オプション2はおそらく少し早く、より多くのディメンションを持つように簡単に変更できるという利点があります。オプション2の欠点は、値が2次元ベクトルへの整数インデックスである必要があることです。
私の意見では、オプション3はType1とType2のタイプには要件がなく、読みやすく、非常に合理的な方法でさらに多くのデータを含めることができるため、私にとって最良の選択です。オプション3の欠点は、あなたがお互いにMyClassのオブジェクトを比較するためのStrictWeakOrderingの順序を定義する必要があるということですが、それはかなり簡単です:
bool operator<(const MyClass & rhs) const {
return (rhs.x() <= x() && rhs.y() <= y());
}
は、クラスのメンバ関数ことを確認し、あなたが行く準備ができなければなりません。
プログラミングの多くのことと同じように、あなたがやっていることの詳細や投資する時間を考慮するまで、明らかな正しい答えはありません。重要な存在と範囲外のエラーをチェックすることを忘れないでください。 :)
あなたの操作者は<間違っています。 lhs.x rhs.yの場合、lhs
MSalters