I'm trying to build a priority_queue of vectors in increasing order of the first element in each vector, in C++. Could someone help me with this? I can use a normal priority_queue with all vector elements in negative sign but is there some other way to do that? Thanks already :)
            Asked
            
        
        
            Active
            
        
            Viewed 75 times
        
    0
            
            
        - 
                    `std::vector` have [relational operators](https://en.cppreference.com/w/cpp/container/vector/operator_cmp) so all you have to do is to decide if you want the queue to use the [less than](https://en.cppreference.com/w/cpp/utility/functional/less) (which is the default) or the [greater than](https://en.cppreference.com/w/cpp/utility/functional/greater) relation. [A `std::priority_queue` reference](https://en.cppreference.com/w/cpp/container/priority_queue) might also come in handy. – Some programmer dude Aug 02 '22 at 09:03
 
2 Answers
3
            You can pass it a different comparator. The default is std::less, but here you'll want std::greater, for example:
#include <functional>
typedef std::vector<int> ItemType;
std::priority_queue<
  ItemType,                                      // Type of items
  std::priority_queue<ItemType>::container_type, // Type of container
  std::greater<ItemType>                         // Comparison functor
  >
  my_queue;
Notice the trick in the second template argument to avoid copying the default value.
        Thomas
        
- 174,939
 - 50
 - 355
 - 478
 
0
            
            
        Yes you can use std::greater or lambda function.
std::priority_queue<int, std::vector<int>, std::greater<int>>
        pq(data.begin(), data.end());
Or
auto cmp = [](int left, int right) { return left < right; };
std::priority_queue<int, std::vector<int>, decltype(cmp)> pq(cmp);
        GAVD
        
- 1,977
 - 3
 - 22
 - 40
 
- 
                    1Worth noting that from C++20 the argument for `pq` is unnecessary, since stateless lambdas became default-constructible. – Fureeish Aug 02 '22 at 09:36