簡體   English   中英

stl 集的 C# 等價物是什么?

[英]What is the C# equivalent of the stl set?

我想使用 C# 在平衡的二叉搜索樹中存儲一些值。 我查看了泛型命名空間中的集合,但沒有找到與 stl 集等效的集合。

我可以使用什么通用集合? (我不想存儲鍵/值對……只是值。)

您可以使用HashSet

HashSet<T>類提供高性能的集合操作。 集合是一個不包含重復元素的集合,其元素沒有特定的順序。

HashSet<T>對象的容量是該對象可以容納的元素數。 HashSet<T>對象的容量會隨着元素添加到對象中而自動增加。

  1. 如果您需要排序集,請使用SortedDictionary<T,U> 這是使用二叉搜索樹實現的。 不可否認,每個條目將使用 64 位,因為您在下面存儲了一個鍵值對。 您可以像這樣圍繞它編寫一個包裝器:

     class Set<T> : SortedDictionary<T, bool> { public void Add(T item) { this.Add(item, true); } }
  2. 如果不需要排序集,請使用HashSet<T>

  3. 否則,請查看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM