看段代码,Err会输出吗?
map<int, string> myMap;
myMap[0] = "000";
myMap[1] = "111";
myMap[2] = "222";
map<int, string>::iterator it = myMap.find(1);
if (it != myMap.end()) {
const_cast<int&>(it->first) = 999;
}
it = myMap.find(2);
if (it == myMap.end()) {
cout << "Err" << endl;
}
结果:
Err会输出。
原因:
map只要输入了key之后,他们就在二叉树上固定住了。所以,key为2的元素是位于key改为999的右边,自然找不到key为2这个元素了散
扩展:
1,set和map一样一样的,如果需要修改set中的key的话,必须用const_cast。有些编译器也支持直接修改,但是标准中没有说。所以
2,对set的key修改的时候,不要影响二叉树
3,什么时候用set呢?
这个我也在项目中遇到过,就是有了那么一个对象了,不需要新的key值。直接用set就行了。