【发布时间】:2017-07-09 16:18:35
【问题描述】:
假设,必须对以下类型的连续数组进行排序:
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 - 为元素
x寻找parent_id;如果有效,则:- 搜索
parent_id,复制并删除该元素 - 在
x上方插入
- 搜索
- 递归执行步骤 3,直到找不到
parent_id
问题:能以更简单的方式实现吗?
注意:此问题并非特定于 C++。
【问题讨论】:
标签: c++ algorithm sorting grouping comparator