演算子のオーバーロード

//pの小さい順にソートして同じだった時はdが小さい順にソートする
struct Prince{
  int d;
  int p;
  bool operator<(const Prince& right) const {
    return p == right.p ? d < right.d: p < right.p;
  }
};

ソートが出来るようになって便利。もしソートする要素が同じだったときの処理も書く。
ちなみにc++からはstruct typedef と書かなくとも、 struct だけでよいらしい。

----追記----
コメントでC++にはタプルというものがありそれの比較を使うと簡単にできると教えていただいた。

優先順位付き大小比較 - Faith and Brave - C++で遊ぼう