#include <iostream>
#include <map>
#include <unordered_map>
#include <iterator>
struct S
{
bool init = true;
static int count;
S() { std::cout << "S::S() " << ++count << "\n"; }
S(S const&) { std::cout << "S::S(S const&)\n"; }
S(S&& s) { std::cout << "S::S(S&&)\n"; s.init = false; }
~S() { std::cout << "S::~S() (init=" << init << ")\n"; }
};
int S::count;
int main()
{
std::cout << "Building unordered map\n";
std::unordered_map<int, S> um;
for (int i = 0; i < 5; ++i)
um.insert(std::make_pair(i, S()));
std::cout << "Building ordered map\n";
std::map<int, S> m(
std::make_move_iterator(um.begin()),
std::make_move_iterator(um.end()));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgoKCnN0cnVjdCBTCnsKICAgIGJvb2wgaW5pdCA9IHRydWU7CiAgICBzdGF0aWMgaW50IGNvdW50OwogICAgUygpIHsgc3RkOjpjb3V0IDw8ICJTOjpTKCkgIiA8PCArK2NvdW50IDw8ICJcbiI7IH0KICAgIFMoUyBjb25zdCYpIHsgc3RkOjpjb3V0IDw8ICJTOjpTKFMgY29uc3QmKVxuIjsgfQogICAgUyhTJiYgcykgeyBzdGQ6OmNvdXQgPDwgIlM6OlMoUyYmKVxuIjsgcy5pbml0ID0gZmFsc2U7IH0KICAgIH5TKCkgeyBzdGQ6OmNvdXQgPDwgIlM6On5TKCkgKGluaXQ9IiA8PCBpbml0IDw8ICIpXG4iOyB9Cn07CgppbnQgUzo6Y291bnQ7CgoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgIkJ1aWxkaW5nIHVub3JkZXJlZCBtYXBcbiI7CiAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCBTPiB1bTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKQogICAgICAgIHVtLmluc2VydChzdGQ6Om1ha2VfcGFpcihpLCBTKCkpKTsKCiAgICBzdGQ6OmNvdXQgPDwgIkJ1aWxkaW5nIG9yZGVyZWQgbWFwXG4iOwogICAgc3RkOjptYXA8aW50LCBTPiBtKAogICAgICAgIHN0ZDo6bWFrZV9tb3ZlX2l0ZXJhdG9yKHVtLmJlZ2luKCkpLCAKICAgICAgICBzdGQ6Om1ha2VfbW92ZV9pdGVyYXRvcih1bS5lbmQoKSkpOwp9Cg==