Скажет, я создал некоторый код, используя node
класс:Лучший способ сортировки узла дерева?
#include <string>
#include <vector>
using namespace std;
class node
{
vector<node> children;
string name;
};
и предположит, что структура данных имеет относительно большого размера в памяти (например, 50 MiB) и несортированный.
Есть ли разумно эффективный способ для меня, чтобы сортировать все узлы (рекурсивно) на основе name
кроме просто создать новый, сортируется дерево в памяти, а затем отбросить старую копию?
Разъяснение относительно сортировки:
Вектор children
просто для сортировки на основе каждого элемента name
. Ничего другого не влияет на сортировку.
(т.е. это потребовало бы мне поменять два объекта без глубокого их копирования - это возможно в C++ 03 и более ранних версий Как насчет позже?)
Конечно, есть. Напишите функцию, которая это делает. В чем проблема? – littleadv
Если я правильно помню, тип, который вы передаете 'std :: vector', должен быть завершен. 'node' не является полным типом, пока не будет завершено определение класса. Обычно с древовидными структурами вы должны иметь «вектор детей» или сделать его двоичным деревом с каждым узлом, содержащим указатели «left» и «right» 'node'. –
@ Insilico: [Huh?] (Https://www.ideone.com/FbBUl) – Mehrdad