c# - 我应该在 C# 中选择哪个通用集合来维护排序的 "list"

标签 c# .net sorting generic-collections

我有一个 Node 类,它有一个 float Distance 属性。

我想要一个数据结构,我可以将所有节点放入其中,并且它们将按顺序存储(例如在 AVL 树或红黑树中)。

  • 我想在 O(log(n)) 中插入
  • 我想检索并删除 O(log(n)) 中的最小值

我尝试使用排序字典,但事实证明它完全没用,因为他不能容纳两个距离相同的项目。

使用 list 和 Sort i 是不可能的,因为移除是 (O(n)) 并且找到 Minimum 也是 (O(n))

我所需要的只是一个简单的通用红黑树结构,它将按我将提供的某些谓词进行排序(即比较节点内的距离)

BCL中有这样的数据结构吗?

最佳答案

您想使用 c5 集合库的 TreeBag<T>类(class)。它是一棵允许重复的红黑树(因此,bag 而不是 set)。按项目值的索引访问是 O(log n);插入和删除是 O(log n) 摊销的。

C5 Collection Library 由 Microsoft 资助;它是开源的并且免费可用。价格合适。

http://www.itu.dk/research/c5/

关于c# - 我应该在 C# 中选择哪个通用集合来维护排序的 "list",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070518/

相关文章:

c# - 如何等待流写入完成

c# - 如何在 Visual Studio C# 命令 MySqlConnection() 上执行“"SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO”;

.net - ConfigureAwait(false) 与 ASP.NET Core 相关吗?

.net - 托管/非托管 C++ 中的 wchar_t NUL

ios - 仅使用时间按日期排序数组?

c# - 如何覆盖 [] 数组中的 ToString()?

c# - 如何强制 BundleCollection 刷新 MVC4 中缓存的脚本包

.net - 在 .NET 中模拟 VBA 算术

javascript - 这种排序算法是发明出来的吗?是线性时间复杂度吗?

xml - 用于 Linux 的开源命令行工具,用于区分忽略元素顺序的 XML 文件