Есть ли способ в c ++ 0x перемещать объекты из неупорядоченных ассоциативных контейнеров? Мне нужно объединить два отдельных неупорядоченных набора, и я хотел бы, в случае использования rvalues, «перерабатывать» элементы в наборах, которые скоро будут прекращены.
Дело в том, что итераторы unordered_set предоставляют только постоянные ссылки на сохраненные элементы. Сначала я думал об использовании const_cast для отбрасывания константы, но при дальнейшем чтении кажется, что это приводит к неопределенному поведению. Любое предложение?
EDIT
Возьмите этот простой пример:
#include <string>
#include <unordered_set>
using namespace std;
void merge_sets(unordered_set<string> &s1, unordered_set<string> &&s2)
{
// Something like this, which (of course) does not work.
for (auto it = s2.begin(); it != s2.end(); ++it) {
s1.insert(std::move(*it));
}
}
int main()
{
unordered_set<string> s1, s2;
// Fill first set:
s1.insert("hello");
s1.insert("world");
// Fill second set.
s2.insert("foo");
merge_sets(s1,std::move(s2));
// After this operation, s2 is empty and s1 contains "hello", "world" and "foo".
}
Другими словами, я хотел бы иметь возможность перемещать элементы из s2 вместо их копирования. Должен быть способ «извлечь» элементы из набора таким образом, чтобы элемент копировался / перемещался, а затем удалялся из текущего набора.