0

我有两个非常简单的结构向量:

typedef struct{
    //three vertex ids
    uint a,b,c;

} Face;

我目前正在尝试像这样运行 set_intersection :

set_intersection(listOfFaces1.begin(),listOfFaces1.end(),listOfFaces2.begin(),listOfFaces2.end(), back_inserter(facesToDelete));

我猜我需要以某种方式覆盖一些比较器?但我不确定如何定义两个 Face 对象之间的相等性......

任何帮助将非常感激。

4

1 回答 1

1

首先,当你用 C++ 编程时,你可以使用:

struct Face {
    uint a,b,c;
};

这是一个简单的实现策略operator<,适用于标准库中的算法和容器。

struct Face {
    uint a,b,c;

    bool operator<(Face const& rhs) const
    {
       if ( a != rhs.a )
       {
          return ( a < rhs.a);
       }
       if ( b != rhs.b )
       {
          return ( b < rhs.b);
       }
       return ( c < rhs.c);
    }
};

或者,正如@Praetorian 所建议的,

struct Face {
    uint a,b,c;

    bool operator<(Face const& rhs) const
    {
       return std::tie(a, b, c) < std::tie(rhs.a, rhs.b, rhs.c); 
    }
};
于 2015-02-25T06:33:33.883 回答