Potrzebuję dość wyspecjalizowanej kolekcji .NET i nie sądzę, że BCL może mi pomóc, ale pomyślałem, że wyrzucę ją tam, gdyby ktoś wiedział o czymś podobnym.Czy posortowana kolejka istnieje w .NET?
Zasadniczo moje wymagania są więc:
- mam listę par wartości, takich jak: (3, 10), (5, 10), (3, 7), (5, 5)
- Zamówienie jest ważne, tj. (3, 10)! = (10, 3)
- Duplikaty pojedynczych wartości są w porządku, ale zduplikowane pary należy upuścić (najlepiej po cichu).
- Kicker jest, potrzebuję tej listy posortowanej przez cały czas. Interesuje mnie tylko pierwsza wartość na liście, jaką definiuje algorytm sortowania w tym samym czasie.
Więc jakiś przykład kodu, co chcę być w stanie to zrobić (jak ja sobie wyobrazić, że to prawdopodobnie być realizowane, inne implementacje, które pasują powyższe są grzywny):
public class Pair
{
public Pair(int first, int second)
{ First = first; Second = second; }
public int First { get; set; }
public int Second { get; set; }
}
SortedQueue<Pair> foo = new SortedQueue<Pair>((left, right) => {
return right.First - left.First;
});
foo.Add(new Pair(10, 3));
foo.Add(new Pair(4, 6));
foo.Add(new Pair(6, 15));
foo.Add(new Pair(6, 13)); // This shouldn't cause a problem
Pair current = foo.Shift(); // current = (4, 6)
Zobacz "Kolejka priorytetowa w .Net", http://stackoverflow.com/questions/102398/priority-queue-in-net –
Dziękuję za poprawną nazwę i link. A teraz, kiedy przeglądam artykuł wikipedia, sposób, w jaki myślałem o jego implementacji, był mieszanką dwóch typów wymienionych w "prostych implementacjach" (zachowując listę z flagą, czy została posortowana, czy nie, po prostu dołącz na insercie, a następnie sortuj w razie potrzeby przed pobraniem). I dziękuję za link do niektórych rzeczywistych implementacji. –
Dla przypomnienia, było to również dla implementacji wyszukiwania A *, które to artykuł wikipedia zawiera również uwagi, więc podwójne kudo. –