次のようなデータ構造を作成するのは良い考えかどうか疑問に思っています。
std::map< std::pair<int,int>,std::string >
ペアが内部でどのように注文されるのか疑問に思っています...:S
ありがとう!
ペアは、ペアoperator<
(のデフォルトの比較操作std::map
)を使用して順序付けられます。
戻り値:
x.first < y.first || (!(y.first < x.first) && x.second < y.second)
(C ++ 03、20.2.2 / 6)
特にマップイテレータを使用する場合は、ペアをマップキーとして使用すると混乱する可能性があることに注意してください(it->first.first
キーペアの最初の要素を取得するのはばかげているように見えます)。ただし、場合によっては、キーのまったく新しい構造体を作成するよりも簡単な場合があります。
すべてのものと同様に、注意して使用してください。簡単で理解しにくい場合は、別の方法を見つける方がよいでしょう。
あなたはできる。私の意見では、それよりも表現力豊かなことをするべきですが、これstd::pair
は意図されていなかったからです。たとえば、文字列をハッシュでマップに保存する場合は、次のようにすることができます。
struct Hash {
int hash_low;
int hash_high;
bool operator<(const Hash& other) const;
};
そして、map<Hash,string>
ではなくを使用しますmap<pair<int,int>,string>
。
ハッシュテーブルに2つのインデックスを作成する場合は、Boost::multiindexコンテナーを確認する必要があります。
あなたの質問に答える限り、他の人が指摘している制限に対処できたらどうでしょうか。私は常に、明確で使いやすく、目前の問題の目的に合った解決策を求めています。