Hatena::Grouptopcoder

TopCoder煮ブログ

本家ブログはこっち → http://d.hatena.ne.jp/nitoyon/

2008-10-03

algorithm の壁

| 23:48 | algorithm の壁 - TopCoder煮ブログ を含むブックマーク はてなブックマーク - algorithm の壁 - TopCoder煮ブログ

std::sort 便利。vector をソートするには

sort(vec.begin(), vec.end());

とする。第3引数で関数オブジェクトを渡す比較方法を変えられる。greater を渡すと降順になる。

sort(vec.begin(), vec.end(), greater<int>());

関数オブジェクトおもしろい。

map みたいなこともできる。

vector<int> vec;
vec.push_back(1);
vec.push_back(3);
vec.push_back(2);
transform(vec.begin(), vec.end(), vec.begin(), negate<int>());
// -1 -3 -2

全部の要素の正負が反転する。

要素を足すには plus 関数オブジェクトの片方を束縛してやる。

transform(vec.begin(), vec.end(), vec.begin(), 
  bind1st(plus<int>(), 1));
// 2 4 3

count_if なんかも便利そう。remove_if は終端の場所が iterator で帰ってくるので要注意。