2016-11-23 11 views
-1

私は、以下のC++クラスを持っているC++でオブジェクトのベクトルから1つのアイテムを削除するにはどうすればよいですか?

class rec 
{ 
public: 
    int width; 
    int height; 
}; 

そして、私の主な機能には、私はrecオブジェクトのベクトルを持っている、

rec r1,r2,r3; 
r1.height = r1.width = 1; 
r2.height = r2.width = 2; 
r3.height = r3.width = 3; 

vector<rec> rvec = { r1,r2,r3 }; 

は今、私は次のメソッド呼び出しでrvecから一つの項目を消去したいです

:、

rvec.erase(remove(rvec.begin(), rvec.end(), r_remove), rvec.end()); 

は、しかし、私はこのエラーを得ました

C2678: binary '==': no operator found which takes a left-hand operand of type 'rec' (or there is no acceptable conversion)

+3

recオブジェクト間の比較を可能にする。これは、removeがr_removeと一致するエントリを見つけるために使用するものです。 –

+0

あなたのクラスに 'operator =='を実装できない場合は、['std :: remove_if'](http://en.cppreference.com/w/cpp/algorithm/remove)を試すこともできます。 – StoryTeller

+0

For将来の参照では、すべてのアルゴリズムが受け入れるタイプの要件のセットとして注意する必要があります。ドキュメントを読み、その要件が何であるかを学びます。 [cppreference](http://en.cppreference.com/w/cpp/algorithm)はブックマークに適した場所です。 – StoryTeller

答えて

5

あなたがremove以来rec

class rec 
{ 
public: 
    int width; 
    int height; 
    bool operator==(const rec& rhs) { 
     return (width == rhs.width) && (height == rhs.height); 
    } 
}; 

は、オペレータ==経由して値を比較し、カスタムデータ構造のための演算子==をオーバーロードする必要がありますが、RECクラスの演算子==()を実装する必要が

+0

ありがとう@ Starl1ght、それは完全に働いた。私はオペレータの定義にクラス名 "rec"を追加しなければならなかった:bool operator ==(const rec&rhs) – MHS2015

+0

@ MHS2015うん、ちょっとミスポ、ごめんなさい:) – Starl1ght

関連する問題