簡體   English   中英

C ++如何從Class類型的向量中刪除重復項?

[英]C++ how to remove duplicates from vector of Class type?

我有一個類,構造函數如下所示:

myclass(int=0,string="",int=0,string="",int=0,int=0,
        int=0,int=0,string="",int=0,int=0); 

和帶有這種類型元素的向量

vector<myclass>myvect;

向量已排序,我正在嘗試刪除重復項,但這不起作用:

std::vector<myclass>::iterator it;
   it=std::unique (myvect.begin(), myvect.end());   
   myvect.resize(std::distance(myvect.begin(),it) );

我得到這個錯誤

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

知道為什么嗎? 有什么辦法可以從此向量中刪除重復項?

std::unique算法需要知道如何比較兩個myclass對象是否相等。 有兩種方法可以執行此操作。 首先是實現myclass::operator== 第二種是將二進制謂詞傳遞給std::unique

std::unique (myvect.begin(), myvect.end(),
             [](const myclass& a, const myclass& b) {
               return /* some expression to test equality */;
             }); 

您可能沒有實現myclass::operator==

您需要為類myclass重載operator == ,以便應用unique算法。

引用std :: unique文檔:

該函數使用operator ==來比較元素對(或版本2中的pred)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM