2011-12-10 108 views
0

在我的作業我得到這款C風格的結構:不同的密鑰

typedef struct { 
    int x, y; 
} Point; 

我有2個AVL樹。在第一個值應首先由X位置,然後由Y,並在第二個樹中,首先由Y然後由X排序。

我的C++有點生鏽,所以我想知道如果我認爲它是正確的:

因爲我有2種排序形式,我應該有2個額外的類,將被用作AVL樹的鍵:每個將基於Point類型,並將賦值運算符重載,以便能夠轉換從鍵類型到點類型。

我想使用兩個類的原因是爲它們中的每一個都「過載」<「運算符,所以我不會有一些奇怪的compareByX(Point p)函數。

僞代碼AVL樹聲明:

AVLTree< XthenY, Value > firstTree; 
AVLTree< YthenX, Value > secondTree; 

這是一個合理的事是什麼?

我希望是足夠清晰的

回答

0

C++標準庫用一個模板參數應該是一個函數或函數處理這個問題,我的問題:

struct XthenY 
{ 
    bool operator()(Point const &a, Point const &b) const 
    { 
     // comparison logic 
    } 
}; 

見,例如,在original STL docs for mapstrcmp例子。

+0

感謝您的回覆。問題是在賦值時我們不允許操作Point struct – bks

+0

@bks:這個選項不需要修改'struct Point'。 –

+0

我們不能在我們的作業中使用STL,對不起,我沒有寫過 – bks