パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

最近プログラミング力が落ちてきている

今日も、C++STLvector を sort してバイナリサーチかけるプログラムを書いていたのだが、全然思ったように動いてくれない。どういうことだ。
自分でプレディケートを書かないといけない類のもので、多少難易度は高いのだが。というかプレディケートための関数オブジェクトの書き方から思い出さなければならなかったのは、結構終わっているかも。

あ、おおぼけのポイントが分かった。a,b 二つの要素をもつ T を a 優先でソートする場合。

bool operator()(const T& left, const T& right) const {
  if (left.a < right.a) return true;
  if (left.a > right.a) return false;
  // a が == のとき
  if (left.b < right.b) return true; 
  return false;
}

と書かないといけないのに、二つ目の if を忘れてた。これではちゃんとソートされない。

あと、map を使おうとして、insert で find もやれる、と思ったのだが、重複している場合、insert の返り値でその重複した要素のイテレータが得られる、と思ったのだが、なんかそうではないらしい....と思ったのも、勘違いだった。ちゃんと得られているじゃないか。おおぼけすぎ。

というか std::map::_Pairib という型があるのを初めて知った(insert の返り値)。たかが STL でも奥が深い。boost なんてとてもとても使いこなせる気がしないなぁ。


なんで C++ はこんなに難しいんだろう。