C# File D'Attente De Priorité

Je suis à la recherche d'une file d'attente de priorité avec une interface comme ceci:

class PriorityQueue<T>
{
    public void Enqueue(T item, int priority)
    {
    }

    public T Dequeue()
    {
    }
}

Toutes les implémentations j'ai vu supposer que item est un IComparable mais je n'aime pas cette approche; je veux spécifier la priorité quand je suis poussant dans la file d'attente.

Si un ready-made de mise en œuvre n'existe pas, quelle est la meilleure façon de faire moi-même? Ce sous-jacente de la structure de données dois-je utiliser? Une sorte de auto-équilibrage de l'arbre, ou quoi? Un standard C#.net la structure pourrait être sympa.

  • Allez-vous l'appeler à partir de plusieurs threads?
  • Non... mon programme est lié, mais un seul thread qui en ont besoin.
  • La raison qui apparaît immédiatement à l'esprit pour T soutenant IComparable est que si vous poussez deux éléments dans la file d'attente avec priorité 2, vous avez encore besoin de comparer les éléments et de décider ce qui commande le processus de la deuxième priorité de deux éléments. . . Si, finalement, vous avez besoin de T à être comparables. Donc comment faire cela avec votre interface... eh Bien vous avez de bonnes suggestions ci-dessous.
  • N'est-elle pas à l'encontre du but d'une file d'attente de priorité? C'est une file d'attente parce que le premier, est le premier. Il est ainsi décidé. Sinon, c'est une liste triée.
  • D: Si toutes les clés sont le même, alors une file d'attente de priorité doit dégénérer à une file d'attente FIFO. Si l'ordre des éléments est utilisé, puis ce sera violé. Ainsi, la mise en œuvre d'une file d'attente de priorité qui dépend de l'ordre des éléments est suspect.
  • connexes: stackoverflow.com/questions/2046674
  • Également liées: cstheory.stackexchange.com/q/593/13809 (stable tas binaire)

InformationsquelleAutor mpen | 2009-12-21