假設,下列類型的鄰接陣列具有被排序:如何實現級聯比較器,級聯相關的對象?
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