std :: map and std :: map ?
質問
私が理解していることから、STD :: MAPの値ペアのキーは、挿入された後に変更することはできません。これは、constとして重要なテンプレート引数を使用してマップを作成することは効果がないことを意味しますか?
std::map<int, int> map1;
std::map<const int, int> map2;
解決
あなたのタイトルの質問に対する答えはイエスです。違いがあります。渡すことはできません std::map<int, int>
aを取る関数に std::map<const int, int>
.
ただし、マップの機能的な動作は、異なるタイプであっても同一です。これは珍しいことではありません。多くのコンテキストでは、INTとLONGは、正式に異なるタイプであるにもかかわらず、同じように動作します。
他のヒント
intは価値によってコピーされるため、このconstの宣言には意味がありません。一方、
std::map<const char*, int> map2;
絵を劇的に変えます
std::map
とにかくそのキータイプを構成します: std::map<int, int>::value_type
は std::pair<const int, int>
. 。追加する場合 const
キータイプに、 const const int
単に崩壊します const int
.
Dewfyが言ったように、あなたが与えた例では、Intは組み込みのタイプであり、Valueでコピーされるので、それは問題ではありませんが、Char*では少し違っています...
あなたが持っていたら
std::map<char *, int> map;
その場合、const char*が失敗すると宣言された変数を挿入できません
char * y = new char[4];
const char * x = "asdf";
std::map<char *, int> map;
map.insert(make_pair(y, 4)); //ok
map.insert(make_pair(x, 4)); //fail
とともに
std::map<char*, int> map;
あなたは実際に言うことができます
char * x = new char[1];
(*x) = 'a';
map<char*,int>::iterator it = map.begin();
cout<<it->first; //prints 'a'
(it->first)[0] = 'x'
cout<<it->first; //prints 'x'
とともに
std::map<const char *, int>
使用に制限されます
map<const char*, int>::iterator
所属していません StackOverflow