繁体   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