Один из способов сделать это так:
struct Point
{
Point(int x_in,int y_in): x(x_in), y(y_in){}
int x;
int y;
};
int main()
{
using namespace boost::lambda;
using namespace std;
vector<Point> v;
v.push_back(Point(2,3));
v.push_back(Point(3,3));
v.push_back(Point(4,4));
v.push_back(Point(4,5));
//First sort the vector as std::unique requires a sorted range
stable_sort(v.begin(), v.end(), bind(&Point::y, _1) < bind(&Point::y, _2));
//Make the elements in the vector unique and erase the duplicate elements from the vector
v.erase(unique(v.begin(),v.end(), bind(&Point::y, _1) == bind(&Point::y, _2)), v.end());
}