Frage

  

Mögliche Duplizieren:
   Prioritätswarteschlange in .Net

Diese Frage ist ähnlich, aber ich möchte genau wissen:

Gibt es eine Klasse / Struktur / ... in .Net für Prioritätswarteschlange? Genau wie in STL, die dafür hat priority_queue. Er akzeptiert eine comparsion Funktion angepasste Sorten zu unterstützen.

Das Beste, was ich in .Net gefunden ist SortedList , dass es Werte von Key sortiert. So eine Lösung ist die Implementierung einer benutzerdefinierten Vergleichen Schnittstelle für Key-Klasse. Aber ich kann nicht meine Elemente in Schlüssel / Wert-Paare trennen. Ich habe atomare Elemente, die nach ihren Werten mit einer benutzerdefinierten Funktion der Warteschlange müssen.

So

, gibt es eine Sammlung Klasse in .NET, die eine Funktion Vergleichen akzeptiert die es der Elemente für die Sortierung?

Gibt es eine Möglichkeit, eine .NET-Klasse (vielleicht HashSet ) abzuleiten, die diese Funktion unterstützt?


Hinweis:

  • Ich weiß, dass viele Drittparteien für diese wirklich gute Klassen implementiert. Vielleicht ein gutes Beispiel dafür ist PowerCollections . Aber ich mag t schnelle und einfache Lösung mit bestehenden Klassen in .NET
  • Ich bin mit .Net Framework 3.5 und wie C #;)
War es hilfreich?

Lösung

Sie können mit einer SortedDictionary -Klasse, die generisch ist.

Sie können einen comparer Objekt an den Konstruktor , die sollte die Priorität Vergleich Ihrer Objekte behandeln:

public class DataComparer : IComparer<Data>
{
    public Int32 Compare(Data a, Data b)
    {
        if (a == null && b == null)
            return 0;
        if (a == null)
            return -1;
        if (b == null)
            return +1;
        return a.Priority.CompareTo(b.Priority);
    }
}

SortedDictionary<Data, Data> priQueue = new SortedDictionary<Data, Data>(
    new DataComparer());

Andere Tipps

Sie könnten nur IComparable auf Ihrer Klasse implementieren und die spezifischen comparer in Ihrer Klasse erstellen, auf diese Weise einfach IList.Sort () verwenden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top