In STL maps, is it better to use map::insert than []?(在 STL 映射中,使用 map::insert 比使用 [] 更好吗?)
问题描述
前段时间,我和一位同事讨论了如何在 STL 中插入值 地图.我更喜欢 map[key] = value; 因为它感觉自然且易于阅读,而他更喜欢 map.insert(std::make_pair(key, value)).
A while ago, I had a discussion with a colleague about how to insert values in STL maps. I preferred map[key] = value; because it feels natural and is clear to read whereas he preferred map.insert(std::make_pair(key, value)).
我刚问过他,我们都不记得插入更好的原因,但我确信这不仅仅是风格偏好,而是效率等技术原因.SGI STL 参考 简单地说:严格来说,这个成员函数是不必要的: 它的存在只是为了方便."
I just asked him and neither of us can remember the reason why insert is better, but I am sure it was not just a style preference rather there was a technical reason such as efficiency. The SGI STL reference simply says: "Strictly speaking, this member function is unnecessary: it exists only for convenience."
谁能告诉我这个原因,还是我只是梦想有一个?
Can anybody tell me that reason, or am I just dreaming that there is one?
推荐答案
写的时候
map[key] = value;
无法判断您是替换 key的value,还是创建新的key 与 value.
there's no way to tell if you replaced the value for key, or if you created a new key with value.
map::insert() 只会创建:
using std::cout; using std::endl;
typedef std::map<int, std::string> MyMap;
MyMap map;
// ...
std::pair<MyMap::iterator, bool> res = map.insert(MyMap::value_type(key,value));
if ( ! res.second ) {
cout << "key " << key << " already exists "
<< " with value " << (res.first)->second << endl;
} else {
cout << "created key " << key << " with value " << value << endl;
}
对于我的大多数应用程序,我通常不在乎我是在创建还是替换,所以我使用更易于阅读的 map[key] = value.
For most of my apps, I usually don't care if I'm creating or replacing, so I use the easier to read map[key] = value.
这篇关于在 STL 映射中,使用 map::insert 比使用 [] 更好吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 STL 映射中,使用 map::insert 比使用 [] 更好吗?
基础教程推荐
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- CString 到 char* 2021-01-01
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05
- 初始化列表*参数*评估顺序 2021-01-01
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
