c++ - std::map - 使用下标运算符添加元素 Vs 插入方法

标签 c++

我正在尝试了解并确定是否可以通过三种不同的方式将元素插入到 std::map 中实际上是相同的。

std::map<int, char> mymap;

就在声明 mymap 之后 - 通过这三种方法为键 10 插入一个值为 a 的元素是否相同?

  1. mymap[10]='a';

  2. mymap.insert(mymap.end(), std::make_pair(10, 'a'));

  3. mymap.insert(std::make_pair(10, 'a'));

特别是,当 std::map 中没有现有元素时,使用 mymap.end() 是否有意义?

最佳答案

主要区别在于(1) 首先在映射中默认构造一个key 对象,以便能够返回对该对象的引用。这使您能够为其分配一些内容。

如果您正在使用存储在映射中但没有默认构造函数的类型,请记住这一点。示例:

struct A {
   explicit A(int) {};
};

std::map<int, A> m;

m[10] = A(42); // Error! A has no default ctor

m.insert(std::make_pair(10, A(42))); // Ok
m.insert(m.end(), std::make_pair(10, A(42))); // Ok

另一个值得注意的区别是(正如@PeteBecker 在评论中指出的那样)(1) 覆盖 map 中的现有条目,而 (2)>(3)不要。

关于c++ - std::map - 使用下标运算符添加元素 Vs 插入方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56288567/

相关文章:

c++ - 为什么在缺少非 const 虚方法时不能实例化类的 const 实例?

c++ - 警告 : control may reach end of non-void function [-Wreturn-type]

c++ - 将 int 值分配给地址

c++ - Qt C++ - 构造带双引号的 QStringlist

c++ - 未调用 ReadFileEx() 完成例程

c++ - 如何测量C math.h库函数的执行时间?

c++ - 无法在 C++ lambda 表达式中调用类成员函数

c++ - 我可以在 C 程序中使用 C++ 库吗?

c++ - 使用 CComVariant 时出现 Outlook 插件内存泄漏

c++ - 多重继承转换未按预期工作