C++STL:向map中添加元素的方法对比

来源:互联网 发布:淘宝淘管家在哪里找到 编辑:程序博客网 时间:2024/05/06 04:17

前提:
有以下类:

class A{public:    A()    {        cout << "A()" << endl;    }    A(const A& rhs)    {        cout << "A(const A&)" << endl;    }    ~A()    {        cout << "~A()" << endl;    }};map<int, A> mapTest;

方法一

mapTest.insert(map<int, A>::value_type(0, a));

输出:(3次构造函数)
A()
A(const A&)
A(const A&)
~A()
~A()
~A()

方法二

mapTest.insert(pair<const int, A>(0, a));

输出:(3次构造函数)
A()
A(const A&)
A(const A&)
~A()
~A()
~A()

方法三

mapTest.insert(pair<int, A>(0, a));

输出:(4次构造函数)
A()
A(const A&)
A(const A&)
A(const A&)
~A()
~A()
~A()
~A()

方法四

mapTest[0] = a;

输出:(4次构造函数,实际上还调用了一次operator=)
A()
A()
A(const A&)
A(const A&)
~A()
~A()
~A()
~A()

方法五

mapTest.insert(make_pair(0, a));

输出:(5次构造函数)
A()
A(const A&)
A(const A&)
A(const A&)
A(const A&)
~A()
~A()
~A()
~A()
~A()

总结

很显然:
方法一、二是最优的,成本最少。
方法五是最差的,成本最高。

0 0
原创粉丝点击