2011-12-20 20 views
0

C++ソート参照http://www.cplusplus.com/forum/beginner/4817/を簡略化しようとしているリンクに従っていますが、bool演算子関数を使用してコンパイル方法をコンパイルできません。比較関数を使用してオブジェクトのベクトルをソート

私はイベントオブジェクトのベクトルを持っています。私はイベントの開始時間に基づいてベクトルを並べ替える必要があります。開始時刻が数字の場合、これは簡単ですが、文字列なのでuint64_tに変換する関数を記述しなければなりませんでした。ここで私は仕事に取得しようとしていたコードは次のとおりです。

ブール機能:

bool EWriter:: operator() (Event &a, Event &b){ 
    return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime()))); 
} 

このコードはコンパイルが、私はそれに名前を付ける方法を見つけ出すことはできませんので、私はそれを参照することはできませんソート。また、私はむしろ<演算子をオーバーロードしたいと思いますが、3番目の引数が必要なエラーが発生し続けます。

sort(events->begin(), events->end(), someFunctionName);?? 

少し関係のない私は、私は引数にconstとして使用することが出来るのですが、私はそれらを実装している場合、私はEventクラスの関数を呼び出すことはできません知っていることである:

は、ここに私の一種です。

+2

あなたの 'に' const'ネスを追加するのを忘れましたイベント&a'と 'イベント&b'? – dasblinkenlight

+0

'Event :: getBeginTime()'は 'const'と宣言してください。それがあなたのコードでないなら、多分あなたはそれを修正する著者を得ることができます。それがあなたのコードなら、それを修正してください! 8v) –

答えて

2

operator()をオーバーロードすると、EWriterfunctorになりました。

EWriterのインスタンスを渡すだけです。

EWriterは、デフォルトコンストラクタを持っている場合は、使用することができます。

sort(events->begin(), events->end(), EWriter()); 

あるいはそれに既に存在するEWriterを渡します。

+0

私は正しくない例に従おうとしていました。私は<演算子をオーバーロードする必要がありましたが、コンパイラはそれを行うために3番目の引数が必要だと言っていました。 – Miek

0

あなたは括弧演算子のオーバーロードされますと試してみてください

bool EWriter:: operator() (Event &a, Event &b){ 
    return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime()))); 

}

を:

bool EWriter:: operator <(Event &a, Event &b){ 
    return (stringToTime(stringReturnWrap(a.getBeginTime())) < stringToTime(stringReturnWrap(b.getBeginTime()))); 

}

+0

私はそれを試みました、コンパイラは私に3番目の引数が必要だと伝え続けました – Miek

+0

削除された答えは基本的に同じ名前のものを比較してオペレータのオーバーロードをすべて削除するというものです。ベクトルソートはstd :: sort(eventVentor.begin()、eventVector.end、compare)です。それは理にかなったが、私は不満を抱き、バブルを書いているようだ。助けてくれてありがとう – Miek

関連する問題