我有一个排序的std :: vector。我想根据vec.i擦除向量内相同值的副本,其中i是int。我使用lambda函数进行排序,但不知道如何将它用于unique
函数。
sort( vec.begin(), vec.end(), [] (Vector const &v1, Vector const &v2) {return (v1.i < v2.i);} );
// how to use lambda function for the following?
vec.erase( unique( vec.begin(), vec.end() ), vec.end() );
答案 0 :(得分:3)
您希望将lambda与std::unique()
一起使用的唯一原因是,数据类型的常规相等运算符是不够的。如果v1 == v2
返回true
,那么您可以执行以下操作:
auto it = std::unique(vec.begin(), vec.end());
vec.erase(it, vec.end());
如果您需要更多控制比较,则可以使用lambda:
auto it = std::unique(vec.begin(), vec.end(), [](const Vector& v1, const Vector& v2) {
// comparison function that returns true or false
return v1.i == v2.i;
});
vec.erase(it, vec.end());
答案 1 :(得分:1)
auto same_i = [](Vector const& v1, Vector const& v2) { return v1.i == v2.i; };
vec.erase(unique(vec.begin(), vec.end(), same_i), vec.end());
答案 2 :(得分:1)
std::unique
可以使用谓词,但使用它时需要3个参数:
vec.erase(std::unique(vec.begin(), vec.end(), [](const Vector& v1, const Vector& v2) { return v1.i == v2.i; }), vec.end());