我正在尝试删除重复的矢量元素。首先,我对元素进行排序,然后查找重复项。我重载了排序功能,但不确定如何擦除零件。
class cp_data
{
public:
int num;
char name;
cp_data(int a, char b)
{
num = a;
name = b;
}
};
int main()
{
std::vector<cp_data> data;
cp_data data1(1, 'a');
cp_data data2(2, 'b');
cp_data data3(1, 'a');
cp_data data4(2, 'b');
data.push_back(data1);
data.push_back(data2);
data.push_back(data3);
data.push_back(data4);
std::sort( data.begin(), data.end(), []( const cp_data& lhs, const cp_data& rhs )
{
return lhs.num< rhs.num;
});
data.erase(unique(data.begin(), data.end()), data.end());
system("pause");
}
此代码给出以下错误。
错误C2672'运算符__surrogate_func':没有匹配的重载函数 错误C2893无法专用于功能模板'unknown-type std :: equal_to :: operator()(_ Ty1 &&,_ Ty2 &&)const'
答案 0 :(得分:5)
问题是unique
不知道如何与元素进行相等性比较。您没有提供operator==(const cp_data& lhs, const cp_data& rhs)
或类似的内容,因此unique
不知道什么构成“相等”元素。可以使用另一个lambda轻松解决此问题:
int main()
{
// [...]
auto lessThanLambda = []( const cp_data& lhs, const cp_data& rhs )
{
return lhs.num< rhs.num;
};
std::sort( data.begin(), data.end(), lessThanLambda);
auto equalLambda = [](const cp_data& lhs, const cp_data& rhs)
{
return lhs.num == rhs.num;
}
data.erase(unique(data.begin(), data.end(), equalLambda), data.end());
}