我有一个朋友在工作,他鼓励我不要将键/值对分配到一个空的映射中,如下所示:
int somefunc(map<int, int> somemap) {
somemap.clear();
somemap[12] = 42;
}
他说,由于清除了somemap映射变量,因此somemap [12]是无效的访问。我认为,即使在调试模式下进行编译,也没有C ++编译器会产生程序集,而该程序集会不必要地尝试访问上述分配上的somemap [12]。通常情况下,上面的最后一行将被编译为与此行相同的程序集:
somemap.insert(std :: pair(12,42));
真的吗?是否有任何理由通过插入与早期方法进行赋值?我更喜欢较早的,因为它更短。
是的,最后一行将始终插入一个元素(如果尚不存在)。
T& operator[](const key_type& x);
- 效果:如果在映射中没有等效于x的键,则将value_type(x,T())插入到映射中。
的地图:: []操作被定义为:
返回对该值的引用,该值映射到与键等效的键,如果该键尚不存在,则执行插入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句