2015-10-06 15 views
3

我目前正试图找出哪个数据结构可能是最好的一个。所以这里是我想要做的:支持排序的最佳数据结构

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

因此,举例来说,如果我有以下对象:

ZebraObject, 10 
CowObject, 1 
DogObject, 2 

我希望能够知道哪些对象具有最小值(在这种情况下,是CowObject)。我还必须访问CowObject中的数据(调用一些函数,进行一些计算等),最后,我会做一些类似'value + = value'的事情。我访问的CowObject所以后,数据会看起来像

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

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

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

+1

看来你需要一个小小的堆。在这种情况下,你的最小对象将在堆的顶部,它将需要O(1)时间来获得它的值 –

+0

我完全忘记了最小堆!非常感谢你!! – dwnenr

+0

@SerhiyChupryk,根据你的建议,值1,2,10将被视为键和minheap将是理想的,但目前的OP正在试图考虑随着时间的推移修改这些键,并将包含重复的键。哦,是的,最小/最大堆可以包含重复项。我在开始的思考过程中认为ZebraObject,CowObject,DogObject是键,而10,1,2是值。我应该想到另一种方式。 (感谢指出minheap) –

回答

0

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

你可以从 SortedSet and equality

+0

一个有序集合在这里做的很多;) – Carsten

+0

看着msdn上的SortedSet,好像我需要将float值作为对象类的成员。有没有办法让这两个分离? – dwnenr

+0

意味着你想保持如果这样,那么你可以使用 –

0

的ObservableCollection得到更多的帮助是最好的方式,如果你将绑定到列表中。它已经实现了INotifyPropertyChanged接口。也许让你的ViewModel继承可观察收藏