Necesito una colección .NET bastante especializada, y no creo que el BCL me pueda ayudar, pero pensé que podría tirarlo si alguien sabía algo similar.¿Existe una cola ordenada en .NET?
Básicamente, mis requisitos son por lo tanto:
- tengo una lista de pares de valores, tales como: (3, 10), (5, 10), (3, 7), (5, 5)
- El pedido es importante, es decir. (3, 10)! = (10, 3)
- Los duplicados de valores individuales son correctos, pero los pares duplicados deben descartarse (preferiblemente en silencio).
- El truco es, necesito esta lista ordenada todo el tiempo. Solo me interesa el primer valor de la lista según lo define el algoritmo de ordenación en cualquier momento.
Por lo tanto, un código de ejemplo de lo que quiero ser capaz de hacer (como yo imaginar que probablemente se llevaría a cabo, otras implementaciones que se ajustan a la anterior son bien a):
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)
Consulte "Cola de prioridad en .Net", http://stackoverflow.com/questions/102398/priority-queue-in-net –
Gracias por el nombre y el enlace adecuados. Y ahora que miro el artículo de wikipedia, la forma en que pensaba implementarlo era una combinación de los dos tipos enumerados en las 'implementaciones simples' (manteniendo una lista con una bandera que indica si estaba ordenada o no, simplemente anexar en la inserción, luego ordenar si es necesario antes de la recuperación). Y gracias dangph por el enlace a algunas implementaciones reales. –
Para el registro, esto fue para una implementación de A * búsqueda también, que ese artículo de wikipedia también tiene algunas notas, por lo que doble kudos. –