map容器的插入(伪复制)遇到的默认构造问题

源代码如下,附带详细的解释

参考:http://blog.csdn.net/wschli/article/details/39379193
#include <iostream>


using namespace std;
#include <map>
#include <string>
#include <iostream>


class OBJ
{
public:
    OBJ(int n)
    {
        num = n;
    }


    //使用下标来操作map的话,是需要默认构造的
//    map[key] = value 操作定义为:
//    如果没有查找到键为 key 的元素,则创建一个新的pair,键值为key,而值采用值初始化。
//    将该pair插入到map中后,再读取该pair并将值设为value。


//    OBJ()
//    {
//        num = -1;
//    }
    int getNum()
    {
        return num;
    }
private:
    int num;
};
int main()
{
//    cout << "Hello world!" << endl;


    using namespace std;
    typedef map<std::string,OBJ> ObjList;
    ObjList mObj;
    OBJ obj(1);
//  mObj["str"] = obj;//这样的操作,需要对象的默认构造方法
    mObj.insert(make_pair("str",obj));
    ObjList mObj2;


    ObjList::iterator it = mObj.begin();
    std::cout<<"mObj-"<<endl;
    for(it;it != mObj.end();it++)
    {
        mObj2.insert(make_pair(it->first,it->second));
        std::cout<<"str:"<<it->first<<endl;
        std::cout<<"num:"<<it->second.getNum()<<endl;
    }


    ObjList::iterator it2 = mObj2.begin();
    std::cout<<"mOjb2-"<<endl;
    for(it2;it2 != mObj2.end();it2++)
    {
        std::cout<<"str:"<<it2->first<<endl;
        std::cout<<"num:"<<it2->second.getNum()<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值