[英]What is the C# equivalent of the stl set?
我想使用 C# 在平衡的二叉搜索樹中存儲一些值。 我查看了泛型命名空間中的集合,但沒有找到與 stl 集等效的集合。
我可以使用什么通用集合? (我不想存儲鍵/值對……只是值。)
您可以使用HashSet
HashSet<T>
類提供高性能的集合操作。 集合是一個不包含重復元素的集合,其元素沒有特定的順序。
HashSet<T>
對象的容量是該對象可以容納的元素數。 HashSet<T>
對象的容量會隨着元素添加到對象中而自動增加。
如果您需要排序集,請使用SortedDictionary<T,U>
。 這是使用二叉搜索樹實現的。 不可否認,每個條目將使用 64 位,因為您在下面存儲了一個鍵值對。 您可以像這樣圍繞它編寫一個包裝器:
class Set<T> : SortedDictionary<T, bool> { public void Add(T item) { this.Add(item, true); } }
如果不需要排序集,請使用HashSet<T>
。
否則,請查看C5 通用集合庫。 特別是TreeSet<T>
。 它是一棵紅黑樹,只存儲值。
試試RedBlackTree.NET 。 它在 VB 中,但我認為它可以輕松轉換為 C#。
而且我相信一些集合類型實際上在內部使用了紅黑樹。 因此,您可能想要反編譯框架本身並四處尋找一些線索。
我不認為二叉樹可以用 HashSet 代替。 它們的性能特點各不相同,大致如下:
HashSet - O(1) 查找 (n) 搜索
二叉搜索樹 - O(log n) 查找 O(log n) 搜索
如果要存儲值並稍后執行搜索,則需要使用二叉樹而不是 HashSet。
HashSet,但 HashSet 在框架的 2.0 版中不可用。 如果您需要 2.0 的某些內容,則使用 Dictionary,並指定一個虛擬類型(例如 object、int 或 bool),您為其提供一個虛擬值(例如 null、0 或 false)作為第二個/值參數(即使用字典作為一組鍵而不關心關聯的值)。
我知道這個問題很老,但對於 .NET Framework 4.0 及更高版本,請使用SortedSet<T>
或ImmutableSortedSet<T>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.