我需要爲2種類型的對象實現BST;賬戶和客戶。這兩種類型都有一個PK(都稱爲「ID」)。 當我在Google /研究解決方案時,我可以找到許多BST解決方案,但它們似乎都適用於簡單的類型,例如BST解決方案可以對{1,2,3,4,99,... 999}等整數進行排序 - 但我希望BST解決方案根據其pk對複雜類型/類進行排序。這是可能的/任何提示?謝謝。C++二進制搜索樹 - 複雜類型
2
A
回答
4
用於構建整數二叉查找樹的邏輯應該可以立即推廣到其他數據類型。而不是在每個節點中存儲一個整數作爲鍵,而是將您的客戶和帳戶名稱存儲在每個字段中,但是在查找時只比較主鍵。這真的應該是那麼簡單。
也就是說,除非這是作業分配,否則應該使用std :: map,它具有二叉搜索樹的所有複雜性保證,但已經爲您編寫,廣泛使用且經過嚴格測試。
希望這會有所幫助!
3
一種方法是修改您的節點定義,添加對您想要存儲的對象的引用並設置一個索引(在您的案例中爲pk),對這些註釋進行排序。在使用不同類型,模板可以解決:
class Account
{
public:
Account(int k) : pk(k) {};
int pk;
/* ... */
};
template<typename T>
class TreeNode
{
public:
TreeNode(T& the_object) : id(the_object.pk), object(the_object) {};
int id;
T& object;
};
int main() {
Account a(9);
TreeNode<Account> tn(a);
std::cout << tn.id;
}
如果你想在一棵樹混合不同的對象類型,另一種是定義包含一個訪問到的PK屬性的類,使賬戶和客戶所固有它,例如:
class Indexable
{
public:
Indexable(int the_pk) : pk(the_pk) {};
int pk;
};
class Account : public Indexable
{
public:
Account(int k) : Indexable(k) {};
/* ... */
};
class TreeNode
{
public:
TreeNode(Indexable& the_object) : id(the_object.pk), object(the_object) {};
int id;
Indexable& object;
};
int main() {
Account a(9);
TreeNode tn(a);
std::cout << tn.id;
}
正如其他答案指出,在生產中,你可能會考慮使用std :: map或另一個已知的樹結構庫。
相關問題
- 1. 二進制搜索樹C++
- 2. 二進制搜索樹C++
- 3. 二進制搜索樹C++
- 4. 二進制搜索樹內的二進制搜索樹
- 5. 二進制搜索樹,搜索方法
- 6. 時間複雜度,二進制(搜索)樹
- 7. 二進制搜索樹
- 8. 二進制搜索樹Instantiaition
- 9. 二進制搜索樹陣列Imp。 C++
- 10. 二進制搜索樹C++(Parents)
- 11. 二進制搜索樹實現(C++)
- 12. 二進制搜索樹插入C++
- 13. C++二進制搜索樹刪除
- 14. 二進制搜索樹插入(C)
- 15. C二進制搜索樹插入
- 16. Swift二進制搜索樹搜索
- 17. Haskell - 二進制搜索樹
- 18. 二進制搜索樹toString
- 19. 使用類的二進制搜索樹
- 20. 二叉樹搜索的複雜性
- 21. 二進制搜索樹搜索操作
- 22. 二進制搜索樹 - 搜索範圍
- 23. Java:深入複製二進制搜索樹類
- 24. C#二進制搜索
- 25. 如何將二進制搜索樹添加到二進制搜索樹?
- 26. 線性搜索或二進制搜索或二叉搜索樹
- 27. 二進制搜索用C
- 28. 二進制搜索樹?算法
- 29. 參數類型`寫一個二進制搜索樹
- 30. 使用二進制搜索樹與自定義數據類型?
爲什麼你不使用'std :: map'(或類似的)? –
如果這是作業,模板可能會有所幫助。否則,爲什麼不按照Oli的建議使用std :: map或std :: multimap? – jmucchiello
你究竟想要完成什麼?爲什麼選擇BST? – yasouser