[英]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.