今日も、C++ で STL の vector を 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
なんで C++ はこんなに難しいんだろう。