#include <iostream>
#include <queue>
using namespace std;

struct cmp {
	bool is_int(char a) {
		int code = (int)a;
		return a >= 48 && a <= 57; // 아스키코드
	}

	// true면 a와b가 위치를 swap
	bool operator()(string a, string b) {
		if (a.length() != b.length()) // 길이가 다르면 짧은 것이 먼저온다.
			return a.length() > b.length();

		// 길이가 같다면
		int sumA = 0, sumB = 0;
		for (int i = 0; i < a.length(); i++){
			if (is_int(a[i])) sumA += (a[i] - '0');
			if (is_int(b[i])) sumB += (b[i] - '0');
		}
		if (sumA != sumB)
			return sumA > sumB; // 각 자리수의 숫자의 합이 작은 것이 먼저온다

		// 숫자의 합이 같다면 사전순
		for (int i = 0; i < a.length(); i++) {
			return (int)a[i] > (int)b[i];
		}

		return true;
	}
};

int main()
{
	priority_queue<int, vector<int>, greater<int>> minHeap; // 최소힙
    
    priority_queue<int, vector<int>, less<int>> minHeap; // 최대힙

	priority_queue<string, vector<string>, cmp> myQ; // 커스텀
}

twpower.github.io/93-how-to-use-priority_queue-in-cpp

 

[C++] C++ STL priority_queue 기본 사용법과 예제

Practice makes perfect!

twpower.github.io

 

+ Recent posts