2

std::mapキーと対応するマップされた値があることを知っています。

今私が言及したデータ型では、キーはstd::set<long> or 型になりますstd::pair<long, long>。したがって、マップ内の値はキーのソートされた値に基づいて格納されることに注意してください。では、std::map<std::set<long>, double> AND はstd:map< std::pair<long, long>, double>有効ですか?

4

2 に答える 2

6

std::setoperator<同じタイプの 2 つのセット間で辞書式比較を実行する があります。そうstd::set<T>です、マップの有効なキーになることができます。

Anには辞書式比較std::pair<T1,T2>も実装されているため、厳密な弱い順序付けを実装する比較が小さい場合にも有効です。そのため、要件はより厳しくなっています。とはどちらも比較をマップのキーにする必要がありますが、有効なペアを形成するためには必要ありません。したがって、有効なペアが必ずしもマップの有効なキーを形成するとは限りません。一方、独自の比較基準を使用してマップをインスタンス化できます。operator<std::map<std::pair<T1, T2>, T3>T1T2operator<T1T2

std::map<std::pair<T1, T2>, T3, Comp> m; 
于 2013-03-04T13:49:41.287 に答える
4

いいえ、構文が間違っています。が必要なstd::map<std::set<a_type_here>, double>ので、set のテンプレート パラメータを追加します。

注意a_type_hereする必要がoperator<あるか、使用する必要がありますstd::set<a_type_here, compare_function>

あなたが望むと思われるものは次のとおりです。 std::map<std::pair<long, long>, double> mapping

使い方の例; mapping[std::make_pair(1,2)] = 0.1;

于 2013-03-04T13:54:04.490 に答える