0

我有一个类,构造函数如下所示:

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) 

知道为什么吗?有什么办法可以从这个向量中删除重复项?

4

3 回答 3

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 */;
             }); 
于 2013-05-06T17:41:16.617 回答
1

你可能没有实现myclass::operator==.

于 2013-05-06T17:39:41.543 回答
1

您需要operator ==为您的班级 重载myclass才能应用该unique算法。

引用std::unique文档:

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

于 2013-05-06T17:40:14.563 回答