据我所知,std :: map中值对中的键在插入后无法更改。这是否意味着使用键模板参数创建一个映射为const无效?
std::map<int, int> map1;
std::map<const int, int> map2;
答案 0 :(得分:13)
标题问题的答案是肯定的。它们是有区别的。您无法将std::map<int, int>
传递给带有std::map<const int, int>
的函数。
然而,地图的功能行为是相同的,即使它们是不同的类型。这并不罕见。在许多情况下,int和long表现相同,即使它们是正式不同的类型。
答案 1 :(得分:1)
因为int是按值复制的,所以这个const的声明没有任何意义。 另一方面
std::map<const char*, int> map2;
大幅改变图片
答案 2 :(得分:1)
std::map
无论如何都会证明其关键类型:std::map<int, int>::value_type
是std::pair<const int, int>
。如果您向密钥类型添加const
,const const int
将只会折叠为const int
。
答案 3 :(得分:0)
正如Dewfy所说,用你给出的例子,没关系,因为int是一个内置类型,它会被值复制,但是使用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