2016-11-23 12 views
8

transparenttemplate <class K> at(K&& key);)の紛失理由がstd::mapにありますか?透明でない理由C++ 1x std :: map :: at?

+1

透明な 'operator []'はありません – Slava

+0

@Slavaですが、透明な 'find'を持っています。 – StoryTeller

+1

私はそれを望んでいません。 Keyは特定の型であり、引数を誤って入力すると、何かを取るテンプレート化された関数は必要ありません。 – SergeyA

答えて

7

私の推測では、std::map::at()std::map::operator[]()の "境界チェック済み"バージョンである必要があります。 std::map::operator[]()のトランスペアレントバージョンを指定すると、std::map::key_typeとクエリキータイプKに追加の要件が課されます。クエリキーがマップにない場合は、それを挿入する必要があります(デフォルトの構成値)。std::map::key_typeはクエリキーの種類。

+0

私はこの議論を買うか分からない。タイプがコンバーチブルであれば、コンストラクタブルと同じです。 – SergeyA

+3

@SergeyA 2つのタイプは変換可能である必要はありません。トランスペアレントなコンパレータで比較する必要があります。 – Leon

+4

これは本当に正しいです!私は将来の読者のためにコメントを残しておきますが、それは論理的に収縮しています。 – SergeyA

関連する問題