据我所知,在std :: map中,键值对中的键一旦插入就无法更改。这是否意味着使用const作为键模板参数创建映射没有效果?
std::map<int, int> map1;
std::map<const int, int> map2;
你的标题问题的答案是肯定的。它们有所不同。你不能将std :: map <int,int>
传递给接受std :: map <const int,int>
的函数。
但是,尽管它们是不同类型,映射的功能行为相同。这并不罕见。在许多情况下,int和long的行为相同,即使它们形式上是不同的类型。
由于 int 是按值复制的,因此 const 的声明没有意义。 另一方面
std::map<const char*, int> map2;
极大地改变了一张图片
char *const v = "qwe";
*v = '6';//允许!!!
/*但这会导致编译器错误:v++;*/
char *const v - 只是 - Dewfystd::map
会将其键类型设置为常量: std::map<int, int>::value_type
是 std::pair<const int, int>
。如果您在键类型中添加一个 const
,const const int
将简单地折叠为 const int
。
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