练习11.35: 在buildMap中,如果进行如下改写,会有什么效果?
trans_map[key] = value.substr(1);
改为trans_map.insert({ key, value.substr(1) });
这题主要是考察map的下标操作与insert成员函数的区别:
对于下标运算符, 有两种情况:
- 关键字已存在,那么会将关键字对应的元素的关联值替换为新值
- 关键字不存在,那么会将一个新的元素插入到map中,关键字即为下标运算符接受的索引,值进行值初始化。最后提取出新插入的元素,并将新值赋值给元素的关联值。
对于insert:
- 关键字已存在,那么什么事情也不做,返回值中的迭代器部分为一个指向关键字对应元素的迭代器,bool部分为false。
- 关键字不存在,那么元素被插入到容器中,返回值中的迭代器部分为一个指向关键字对应元素的迭代器,bool部分为true。
对于此题来说,当在规则中出现多个相同的key时,由于上述的差异,下标运算符会保留最后一个key对应的value,而insert会保留第一个key对应的value。