引数

std::priority_queue は、テンプレート引数とコンストラクタの引数の順序に不整合があって気持ち悪い。

テンプレート引数は、『要素の型・実装に使うコンテナの型・比較ファンクタクラス』の順

template <class T, class Container = vector<T>,
          class Compare = less<typename Container::value_type> >
  class priority_queue;

コンストラクタの引数は、『比較ファンクタ・実装に使うコンテナ』 の順

priority_queue(const Compare& x,
               const Container& = Container());

コンストラクタの方の、比較ファンクタを先に渡す方が自然ですが、テンプレートのほうの宣言では Compare のデフォルト引数 less のテンプレート引数がContainerに依存してるから逆になっているっぽい。
統一しようとして、コンストラクタの引数の順序をテンプレート引数と同じにすると使い勝手が下がってしまう。

てーことは、テンプレート引数の宣言が、宣言順序に依存してしまうのが原因かしら。
これを解消しようとすると引数の相互依存の解決とかが面倒そうなわけですね。