std::map与QMap插入效率对比

16 篇文章 1 订阅

上一篇文章介绍了std::map在普通operator[]赋值的流程std::map的使用_DongDongBaJiaYou的博客-CSDN博客

这一篇继续研究下std::map的集中插入方式的效率问题:

    std::map<char,Student> mymap;
    std::map<char,Student>::iterator it;


    mymap['a'] = "string_a"; //与Student("string_a")相同,这里包含了4步:
                             //1.调用Student(const char* name)
                             //2.调用Student()
                             //3.调用Student& operator=(const Student& other)
                             //4.调用~Student()
    mymap.insert(std::pair<char, Student>('b', "string_b"));//这里包含了3步:
                                                            //1.调用Student(const char* name)
                                                            //2.调用Student (const Student& other)
                                                            //3.调用~Student()
    mymap.insert(std::make_pair<char, Student>('d', "string_d"));//这里包含了5步:
                                                                 //1.调用Student(const char* name)
                                                                 //2.调用Student (const Student& other)
                                                                 //3.调用Student (const Student& other)
                                                                 //4.调用~Student()
                                                                 //5.调用~Student()
    mymap.insert(std::make_pair('c', "string_c"));//这里包含了1步:
                                                  //1.调用Student(const char* name)
    mymap.emplace('e', "string_e"); //这里包含了1步:
                                    //1.调用Student(const char* name)

可以看到,使用emplace是优的!不管在写法还是效率上都是最优的!


再看下QMap的两种方式:

    QMap<char,Student> mymap;
    QMap<char,Student>::iterator it;


    mymap['a'] = Student("string_a"); //与Student("string_a")相同,这里包含了6步:
                                      //1.调用Student(const char* name)
                                      //2.调用Student()
                                      //3.调用调用Student (const Student& other)
                                      //4.调用~Student()
                                      //5.调用Student& operator=(const Student& other)
                                      //6.调用~Student()
    mymap.insert('b', "string_b");//与Student("string_a")相同,这里包含了3步:
                                  //1.调用Student(const char* name)
                                  //2.调用Student (const Student& other)
                                  //3.调用~Student()

可以看到,使用insert是最优的!不管在写法还是效率上都是最优的!


结论:在C++11加持下,std::map的emplace看来是最好的方法了!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值