例:C++ヘッダーファイルで、struct Record
を定義していて、可能なソートのために使用したいので、less operator
をオーバーロードしたいと考えています。ここに私が様々なコードで気づいた3つの方法があります。私はおおよそ気付きました。std::set
、map
、priority_queue
、...コンテナにRecord
を入れるつもりならば、バージョン2が動作します(おそらくバージョン3も同様です)。 をvector<Record> v
に保存してからmake_heap(v.begin(), v.end())
などと呼び出すと、バージョン1のみが動作します。例えば、同じヘッダファイル内C++の演算子オーバーロードが少ない、どちらの使い方ですか?
struct Record
{
char c;
int num;
//version 1
bool operator <(const Record& rhs)
{
return this->num>rhs.num;
}
//version 2
friend bool operator <(const Record& lhs, const Record& rhs) //friend claim has to be here
{
return lhs->num>rhs->num;
}
};
:
//version 3
inline bool operator <(const Record& lhs, const Record& rhs)
{
return lhs->num>rhs->num;
}
基本的に、私は誰かがこれらの三つの方法の違い何いくつかの概要を思い付くことができるかどうかを確認するためにここに質問を投げたいと各バージョンの適切な場所は何ですか?
はあなたの受け入れの評価を向上させます。 –
動作しないケースごとに完全なサンプルプログラムを投稿してください。 –
私はバージョン3を見ません –