Search code examples
c#priority-queue

PriorityQueue containing array C#


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


Solution

  • 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