C++STL map的指针与复制

基本上所有的博客都在说map里“=”是浅拷贝,经试验发现这些说法不对。

测试代码:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<string, int> m1; //初始化m1
    map<string, int> m2; //初始化m2,或在此赋值m1给m2
    map<string, int> *m3; //初始化map指针
    m1["a"] = 1;
    m1["b"] = 2;
    m3 = &m1;   //将m1的地址赋值给m3
    m2 = m1;    //m1赋值给m3
    //输出原始数据
    cout<<"origin data ..."<<endl;
    cout<<"m1[a]:"<<m1["a"]<<"   m1[b]:"<<m1["b"]<<endl;
    cout<<"m2[a]:"<<m2["a"]<<"   m2[b]:"<<m2["b"]<<endl;
    cout<<"m3[a]:"<<(*m3)["a"]<<"   m3[b]:"<<(*m3)["b"]<<endl;

    //改变m2,不会改变m1的值
    m2["a"] = 3;
    m2["b"] = 5;
    cout<<"after change m2  ..."<<endl;
    cout<<"m1[a]:"<<m1["a"]<<"   m1[b]:"<<m1["b"]<<endl;
    cout<<"m2[a]:"<<m2["a"]<<"   m2[b]:"<<m2["b"]<<endl;
    //改变m3,会改变m1的值
    (*m3)["a"] = 10;
    (*m3)["b"] = 11;
    cout<<"after change m3  ..."<<endl;
    cout<<"m1[a]:"<<m1["a"]<<"   m1[b]:"<<m1["b"]<<endl;
    cout<<"m3[a]:"<<(*m3)["a"]<<"   m3[b]:"<<(*m3)["b"]<<endl;

    return 0;
}

 

测试结果:

 

可以看到,如果直接赋值m1给m2,改变m2并不能改变m1的值;如果将m1的地址赋值给m3指针,会改变m1的值。map指针的读取方式,除了众多博客里看到的迭代方式之外,还可以直接采用:

值=(*m3)[键]

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值