Я хочу преобразовать временный контейнер в std::map<S, T>
.
Допустим, временный контейнер является std::unordered_map<S, T>
, с T
move-constructible.
Мой вопрос: (как) можно использовать конструктор перемещения std::map<S, T>
?
Для упрощенного случая рассмотрим
#include <bits/stdc++.h>
using namespace std;
template<typename S, typename T>
map<S, T>
convert(unordered_map<S, T> u)
{
// Question: (how) can I use move constructor here?
map<S, T> m(u.begin(), u.end());
return m;
}
int main()
{
unordered_map<int, int> u;
u[5] = 6;
u[3] = 4;
u[7] = 8;
map<int, int> m = convert(u);
for (auto kv : m)
cout << kv.first << " : " << kv.second << endl;
return 0;
}
Вывод
3 : 4
5 : 6
7 : 8
Конечно,в более сложных настройках S
и T
не int
.
Большое спасибо.
Обновление Спасибо всем за мгновенное и ценноеответы!Я ценю замечание, что map
по своей структуре отличается от unordered_map
.Поэтому, если перемещение не может произойти на уровне контейнера, я бы также принял перемещение на уровне элемента.Просто хочу убедиться и знать как.