Предположит, непрерывный массив следующего типа должен быть отсортирован:Как реализовать сортирующий компаратор, который каскадирует связанные объекты?
struct X
{
string id, parent_id;
int value;
bool operator< (const X& x) const { return value < x.value; }
};
С вышеупомянутым operator<
, он создает следующий отсортированный массив:
{i, p, v}
----------
{a, "", 1}
{b, "", 2}
{c, "", 3}
{dc, c, 4}
{ea, a, 5}
{fb, b, 6}
Что такое лучший способ, чтобы написать компаратор, так что создает следующий отсортированный массив:
{i, p, v}
----------
{c, "", 3} // grouping of 'c'
{dc, c, 4}
{a, "", 1} // grouping of 'a'
{ea, a, 5}
{b, "", 2} // grouping of 'b'
{fb, b, 6}
Как вы можете видеть, массив специально сортируется, где parent_id
создает группу &, а затем, основываясь на самом низком и высоком значении, массив устроен. Другими словами, последние зависимые (те X
, у которых есть непустые parent_id
) объекты являются ключевыми игроками. Остальных родителей тянет к ним.
Моих усилия: Естественный способ сделать это:
- Выполните сортировку с вышеупомянутым компаратором
- итерации от дна/назад, то есть самого высокого
value
- Посмотрите на
parent_id
для элементx
; если действует, то:- поиски
parent_id
, скопируйте & Стирание этот элемент - вставки чуть выше
x
- поиски
- Рекурсивный не выполнить шаг 3 до тех пор,
parent_id
не найден
Вопрос: Может ли это быть достигнуто любым простым способом?
Примечание: Эта проблема не относится к C++.
Спасибо за ответ. Было бы более полезно, если бы это было указано в виде рабочего примера. Кроме того, я не смог получить сравнение между 'string'. Тем не менее, я нашел решение и обновил ответ. – iammilind