C ++如何从Class类型的向量中删除重复项?

时间:2013-05-06 17:37:35

标签: c++ vector duplicates

我有一个类,构造函数看起来像这样:

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) 

任何想法为什么? 有什么方法可以从这个向量中删除重复项吗?

3 个答案:

答案 0 :(得分:3)

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 */;
             }); 

答案 1 :(得分:1)

您可能没有实施myclass::operator==

答案 2 :(得分:1)

您需要重置班级operator ==的{​​{1}}才能应用myclass算法。

引自std::unique文档:

  

该函数使用operator ==来比较元素对(或版本(2)中的pred)。