2

次のようなデータ構造を作成するのは良い考えかどうか疑問に思っています。

std::map< std::pair<int,int>,std::string >

ペアが内部でどのように注文されるのか疑問に思っています...:S

ありがとう!

4

3 に答える 3

9

ペアは、ペアoperator<(のデフォルトの比較操作std::map)を使用して順序付けられます。

戻り値:x.first < y.first || (!(y.first < x.first) && x.second < y.second)

(C ++ 03、20.2.2 / 6)

特にマップイテレータを使用する場合は、ペアをマップキーとして使用すると混乱する可能性があることに注意してください(it->first.firstキーペアの最初の要素を取得するのはばかげているように見えます)。ただし、場合によっては、キーのまったく新しい構造体を作成するよりも簡単な場合があります。

すべてのものと同様に、注意して使用してください。簡単で理解しにくい場合は、別の方法を見つける方がよいでしょう。

于 2010-04-23T01:29:51.740 に答える
1

あなたはできる。私の意見では、それよりも表現力豊かなことをするべきですが、これstd::pairは意図されていなかったからです。たとえば、文字列をハッシュでマップに保存する場合は、次のようにすることができます。

struct Hash {
    int hash_low;
    int hash_high;

    bool operator<(const Hash& other) const;
};

そして、map<Hash,string>ではなくを使用しますmap<pair<int,int>,string>

于 2010-04-23T01:29:12.990 に答える
1

ハッシュテーブルに2つのインデックスを作成する場合は、Boost::multiindexコンテナーを確認する必要があります。

あなたの質問に答える限り、他の人が指摘している制限に対処できたらどうでしょうか。私は常に、明確で使いやすく、目前の問題の目的に合った解決策を求めています。

于 2010-04-23T01:31:25.377 に答える