假设,下列类型的邻接阵列具有被排序:如何实现级联比较器,级联相关的对象?
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's之间的比较。尽管如此,我找到了一个解决方案,并在答案中进行了更新。 – iammilind