【问题标题】:Best data structure that supports sorted支持排序的最佳数据结构
【发布时间】:2016-01-02 22:07:34
【问题描述】:

我目前正在尝试找出最适合使用的数据结构。所以这就是我想要做的:

我有一个对象和一个与该对象关联的值。我希望能够知道结构中哪个条目的值最小。

例如,如果我有以下对象:

 ZebraObject, 10
 CowObject, 1
 DogObject, 2

我希望能够知道哪个对象具有最小值(在本例中为 CowObject)。我还必须访问 CowObject 中的数据(调用一些函数,进行一些计算等),最后,我将执行类似“value += value”的操作。所以在我访问了 CowObject 之后,数据看起来像

 ZebraObject, 10
 CowObject, 2 // (1 + 1)
 DogObject, 2

谁能帮我找出最适合这种情况的数据结构?

编辑:我假设每个元素(至少对于对象)都是唯一的。与对象关联的浮点值可以重复。

【问题讨论】:

  • 您似乎需要一个最小堆。在这种情况下,您的最小对象将位于堆顶部,并且需要 O(1) 时间才能获得其值
  • 我完全忘记了最小堆!非常感谢!!
  • @SerhiyChupryk,根据您的建议,值 1,2,10 将被视为键,minheap 将是理想的,但目前 OP 正试图考虑随着时间的推移修改这些键并且将包含重复键。哦,是的,最小/最大堆可以包含重复项。我一开始的思考过程认为 ZebraObject、CowObject、DogObject 是键,10、1、2 是值。我应该换个思路。 (感谢您指出 minheap)
  • 你遇到过SortedSet<T>吗?
  • @tomab 我刚刚检查过了。但是我似乎为了使用 SortedSet,我需要使浮点值成为 Object 的成员。

标签: c# data-structures


【解决方案1】:

Sorted Set 有助于满足您的要求。但排序集不允许重复。根据对象的特定字段进行排序实现IComparer。

您可能会得到更多帮助 SortedSet and equality

【讨论】:

  • 一个排序的集合在这里做得很多;)
  • 查看 msdn 上的 SortedSet,似乎我需要将浮点值保留为对象类的成员。有没有办法让这两个分开?
  • 表示你想保留 如果这样你可以使用
  • 是的,我想将其保留为 甚至 。我只需要能够访问这两个数据并修改它们。
  • 表示你想保留 如果这样你可以使用 Dictionary 或 List>。参考以下链接 1) stackoverflow.com/questions/289/… 2) c-sharpcorner.com/UploadFile/mahesh/…
【解决方案2】:

如果您要绑定到列表,ObservableCollection 是最好的方法。它已经实现了 INotifyPropertyChanged 接口。也许让你的 Viewmodel 继承自 observablecollection

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2013-02-04
    • 2018-02-20
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多