【C++】Class定義内に比較関数を書いてソート

  • Class外に書くより中に書いた方がいいでしょう
class Data{
    public:
        int i;
        int p;
        int y;
        int order;

    static bool cmp_by_i(const Data &a, const Data &b)
    {
        return a.i < b.i;
    }

    static bool cmp_by_y(const Data &a, const Data &b)
    {
        return a.y < b.y;
    }
};

...

// sort by year
sort(list.begin(), list.end(), Data::cmp_by_y);

追記

  • 比較関数を複数用意したいなら上記でOK
  • 1つでいいならData自体に比較演算子を定義すれば十分

AtCoder ABCに1年ぶりくらいに参加。C問題すら解けずに絶望

beta.atcoder.jp

  • ナイーブに解くと109なので無理
  • 7, 5, 3から作れる数字を全列挙してそれらをチェックしつつカウントすればいい
    • この方針は正解
    • しかし列挙ができずに時間切れ
  • 列挙方法
    • 再帰関数 or 3進数
    • どちらも時間内にどう書けばいいのか分からず
  • 時間切れ後、引き続き取り組んでACした

解答

beta.atcoder.jp

レート

  • 微減で緑コーダー...

学び

  • 再帰を使って列挙する方法が分かった

参考:別の人のPythonの解答

beta.atcoder.jp

  • itertools

【C++】cpp compiler warning (g++ hoge.cpp) range-based for loop is a C++11 extension

answer_abc114_c.cpp:46:16: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
    for(char c : s) {
               ^
1 warning generated.

I changed from

g++ hoge.cpp

to

g++ -std=c++14 hoge.cpp