template<class T>
Class Node
{
//irrelavant functs
};
class A
{
unordered_set<unique_ptr<Node<T>>, myHash<Node<T>>, myEqual<Node<T>>> nodes
shared_ptr<A> child;
void moveToChild()
{
for(auto it = nodes.begin(); it < nodes.end(); ++it) {
if (some_cond) {
child->nodes.emplace(std::move(*it));
}
}
}
};
У меня есть класс, который содержит кучу узлов в unordered_set и имеет указатель на себя, называемый дочерним. Когда выполняются некоторые произвольные условия, этот класс должен переместить некоторые (или все) свои указатели на объекты Node в контейнер дочерних узлов. Но я не уверен, возможно ли это, поскольку ключи в unordered_sets являются константами.
Я не возражаю против создания нового интеллектуального указателя, но я не могу позволить себе создавать новый узел каждый раз, когда я перемещаю его или удаляю из unordered_set. Если то, что я пытаюсь сделать, невозможно с unique_ptrs, мне интересно, возможно ли это с shared_ptrs?
Я никогда не реализовывал свои собственные распределители для контейнеров STL, поэтому не уверен, что я на правильном пути, но я думал о написании собственного распределителя для unordered_set, который принимает логическое значение, если это правда, он удаляет объект, если это ложь, это не так. не освобождает указатель, а удаляет его из контейнера (опять же, не уверен, что смогу сделать такое резкое изменение в поведении контейнера)
Итак, можно ли как-то переместить умный указатель из одного unordered_set в другой, не освобождая его?
Примечание. Пожалуйста, не обращайте внимания на опечатки и синтаксические ошибки, это сильно упрощенная версия моего кода.