C++ 使用lambda函数擦除std::vector中相同值的副本

C++ 使用lambda函数擦除std::vector中相同值的副本,c++,unique,stdvector,erase,C++,Unique,Stdvector,Erase,我有一个排序的std::vector。我想根据vec.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(

我有一个排序的std::vector。我想根据vec.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() );
sort(vec.begin(),vec.end(),[](向量常量&v1,向量常量&v2){return(v1.i
std::unique
可以使用谓词,但使用时需要3个参数:

vec.erase(std::unique(vec.begin(), vec.end(), [](const Vector& v1, const Vector& v2) { return v1.i == v2.i; }), vec.end());

您希望将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());
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());