我是靠谱客的博主 斯文绿草,最近开发中收集的这篇文章主要介绍谈谈C++中map的[]和insert谈谈C++中map的[]和insert,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

谈谈C++中map的[]和insert

一、测试代码

#include <iostream>
#include <map>
#include <utility>
using namespace std;
class Sample
{
static int _noOfObjects;
int _objectNo;
public:
Sample()
: _objectNo(_noOfObjects++) {
std::cout << "Inside default constructor of object " << _objectNo << std::endl;
}
Sample(const Sample& sample)
: _objectNo(_noOfObjects++) {
std::cout << "Inside copy constructor of object " << _objectNo << std::endl;
}
Sample& operator=(const Sample& s) {
std::cout << "operator=" << std::endl;
return *this;
}
~Sample() {
std::cout << "Destroying object " << _objectNo << std::endl;
}
};
int Sample::_noOfObjects = 0;
int main(int argc, char* argv[]) {
Sample sample;
std::map<int, Sample> map;
map.insert(std::make_pair(1, sample));
//
map[1] = sample;
return 0;
}

二、运行结果

1、采用insert的运行结果:
Inside default constructor of object 0
Inside copy constructor of object 1
Inside copy constructor of object 2
Destroying object 1
Destroying object 2
Destroying object 0
2、采用[]的运行结果:
Inside default constructor of object 0
Inside default constructor of object 1
operator=
Destroying object 1
Destroying object 0

三、结论

1、构造顺序

假设有一个val对象,要放到map中,如上述代码中的Sample sample;

对于insert方法,如果map中不存在key,则采用拷贝构造函数创建val临时对象(make_pair过程),再采用拷贝构造函数创建map中的val对象。

对于[]方法,如果map中不存在key,则采用默认构造函数创建map中val对象,再采用赋值运算符赋值;如果原来存在key,则直接采用赋值运算符赋值。

2、说明

如果一个key存在, operator[] 对这个key-value进行重写
如果一个key存在, insert 不会对原来的key-value进行重写

最后

以上就是斯文绿草为你收集整理的谈谈C++中map的[]和insert谈谈C++中map的[]和insert的全部内容,希望文章能够帮你解决谈谈C++中map的[]和insert谈谈C++中map的[]和insert所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部