我正在尝试了解并确定是否可以通过三种不同的方式将元素插入到 std::map
中实际上是相同的。
std::map<int, char> mymap;
就在声明 mymap
之后 - 通过这三种方法为键 10
插入一个值为 a
的元素是否相同?
mymap[10]='a';
mymap.insert(mymap.end(), std::make_pair(10, 'a'));
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/