// map::emplace
#include <iostream>
#include <map>
class Test {
public:
Test(int i, int k) : ii(i), kk(k) {
std::cout << "ii = " << ii << ", kk = " << kk << std::endl;
}
Test(const Test& other) : ii(other.ii), kk(other.kk) {
std::cout << "调用拷贝构造函数" << std::endl;
}
Test(Test&& other) : ii(other.ii), kk(other.kk) {
std::cout << "调用移动构造函数" << std::endl;
}
int ii;
int kk;
};
int main() {
std::map<char, Test> mymap;
std::cout << "1:";
mymap.emplace('x', Test(100, -100));
std::cout << "2:";
// mymap.emplace('y', Test(200, -200));
mymap.emplace(std::piecewise_construct, std::forward_as_tuple('y'),
std::forward_as_tuple(200, -200));
std::cout << "mymap contains:";
for (auto& x : mymap)
std::cout << " [" << x.first << ':' << x.second.ii << ']';
std::cout << '\n';
return 0;
}
结果:
1:ii = 100, kk = -100
调用移动构造函数
2:ii = 200, kk = -200
mymap contains: [x:100] [y:200]