Уникальные векторные объекты по указанному свойству объекта - PullRequest
1 голос
/ 23 марта 2011

Какой самый эффективный способ получить вектор, имеющий уникальное указанное свойство объекта (не уникальные объекты, а только объекты с уникальным указанным свойством).

Если вам нужно уникальное свойство

point.x = 2 point.y = 3
point.x = 3 point.y = 3
point.x = 4 point.y = 4
point.x = 4 point.y = 5

Может стать:

point.x = 3 point.y = 3
point.x = 4 point.y = 4
point.x = 4 point.y = 5

Ответы [ 2 ]

0 голосов
/ 23 марта 2011

Один из способов сделать это так:

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());
}
0 голосов
/ 23 марта 2011

Если вам не нужно поддерживать порядок элементов, вы должны вставить свои элементы в set или hash_set (зависит от количества элементов) и создать функции сравнения и / или хеш-функции, чтобы сообщить (hash_)set что объекты с равным свойством .y "равны".

...