1. ホーム
  2. c++

[解決済み] constキーとnon constキーの違いは何ですか?

2023-07-30 23:37:29

質問

次の2行の違いは何でしょうか?

map<int, float> map_data;
map<const int, float> map_data;

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

  • int そして const int は2つの異なるタイプです。

  • std::map<int, float> そして std::map<const int, float> は、同様に、異なるタイプです。

の違いは std::map<const int, float>std::map<int, float> の違いは、ある程度、アナログなものです。 std::map<int, float>std::map<std::string, float> ; の場合、それぞれ新しいマップタイプを取得します。

const の場合、内部キータイプ はまだ非 const int :

std::map<const int, float>::key_type       => const int
std::map<int, float>::key_type             => int

ただし、マップのキーは 意味的に は不変であり、キーに直接アクセスできるすべてのマップ操作(例えば、イテレータの再参照により value_type を生成します)は constkey_type :

std::map<const int, float>::value_type => std::pair<const int, float>
std::map<int, float>::value_type       => std::pair<const int, float>

そこで、差分 は、実装が許す限り、重要なすべての方法において、ほとんど見えません。

しかし、必ずしもそうではありません。標準では公式に が必要です。 キータイプはコピーと移動が可能でなければなりません。 マップノードを再利用する実装もあります。 そのような実装では const キーを使おうとしてもうまくいきません。