Home > Enterprise >  PriorityQueue containing array C#
PriorityQueue containing array C#

Time:07-11

I would like to create a PriorityQueue to store int[]. The first element in the array is gonna be the criteria for the comparisons.

I could do that easily in Java, though I could not convert it to C#. Could you please guide me?

enter image description here

CodePudding user response:

Priority queues don't work the same way in both languages. What you're trying to do is the Java way of giving PQ a lambda (function) to compare any two elements. In C#, you give each element a priority when adding it to the queue, and then make a comparer to compare different priorities.

PriorityQueue<int[], int> pq = new(Comparer<int>.Create((a, b) => a - b));
// The Comparer compares the *priorities*, not the elements

pq.Enqueue(new int[] { 1, 2, 3, 4 }, 5);
pq.Enqueue(new int[] { 1, 2, 3, 4 }, 0); // This has more priority
while (pq.TryDequeue(out int[]? arr, out int priority))
{
    Console.WriteLine(priority); // 0; 5
}

You may be interested in just a simple List and LINQ:

using System.Linq; // at the top of your code to include LINQ


List<int[]> list = new();
list.Add(new int[] { 1, 2, 3, 4 });
list.Add(new int[] { 5, 2, 3, 4 });
IEnumerable<int[]> ordered = list.OrderBy(x => x[0]); // orders by the first element
  • Related