1. ホーム
  2. c++

[解決済み] std::mapの順序を確認する方法は?

2022-03-02 05:40:12

質問

を使用しています。 std::map<int, ...> 挿入時に、整数キーの昇順で反復処理されるようにするにはどうすればよいですか?

どのように解決するのですか?

何もする必要はありません。マップはキーの値に従って昇順になります。

内部的には、マップはキー間の比較を行い、要素の順番を決めます。デフォルトでは std::less<KEY> と等価である。 bool operator<(int, int) は整数の場合です。ユーザー定義型の場合は、オプションが必要です。

  1. を実装します。 bool operator<(const MyType&, const MyType&) ユーザー定義型間の厳密な弱い順序の比較を実装しています。あなたの型が自然な順序を持つ場合にこれを使用します。

  2. 厳密な弱順序を実装したバイナリファンクタを用意し、それを3番目のテンプレートパラメータとしてマップに渡します。あなたの型が自然な順序付けを持たない場合、あるいは std::less<Key> を経由して bool operator<(...) を1点目から

通常、舞台裏では、マップは自己調整可能な二分木として実装され、新しい要素をマップに配置したり、2つの要素が等しいかどうかを判断するために、厳密な弱い順序が使われます。余談ですが、同じロジックが std::set キーと値が同じである場合。