在C++集中找到相等实例 我使用C++ STL集,我想知道它是否存在于集合中,是一个等价的实例。为了检索实例,我正在使用find set方法。问题是它不起作用。我认为问题在于我的比较器对象: bool SetComparator::operator ()( const Point* i1, const Point* i2 ) const { if ( *i1 == *i2 ) return false; return true; }

在C++集中找到相等实例 我使用C++ STL集,我想知道它是否存在于集合中,是一个等价的实例。为了检索实例,我正在使用find set方法。问题是它不起作用。我认为问题在于我的比较器对象: bool SetComparator::operator ()( const Point* i1, const Point* i2 ) const { if ( *i1 == *i2 ) return false; return true; },c++,C++,用一种简单的方法为类点重新定义运算符==: bool Point::operator ==( const Point& p ) const { if (x == p.x && y == p.y) return true; return false; } 调试之后,我可以看到find方法调用了操作符,但它没有找到相同的实例,因此find返回end,但我知道存在一个相等的对象。我认为问题与内部秩序有关。我该怎么办?std::set使用偏

用一种简单的方法为类点重新定义运算符==:

bool Point::operator ==( const Point& p ) const {
     if (x == p.x && y == p.y)
         return true;
     return false;
}

调试之后,我可以看到find方法调用了操作符,但它没有找到相同的实例,因此find返回end,但我知道存在一个相等的对象。我认为问题与内部秩序有关。我该怎么办?

std::set使用偏序,即运算符std::set使用偏序,即您的SetComparator::operator中的运算符如果两点比较为true,则返回false。这正常吗?在SetComparator::Operator中,如果2点比较为true,则返回false。这是正常的吗?如果我有X和Y,我怎么能用得少?un无序EdTeSET是可以的,但是我不能使用C++。11@greywolf82根据元素的数量和搜索次数,是否考虑使用数组?线性搜索也非常快。我需要很多元素,所以一个简单的数组在这种情况下不起作用。如果我有x和y,我怎么能用得少?un无序EdTeSET是可以的,但是我不能使用C++。11@greywolf82根据元素的数量和搜索次数,是否考虑使用数组?线性搜索也非常快。我需要很多元素,所以一个简单的数组在这种情况下不起作用。
template <class T1, class T2>
bool operator< (const std::pair<T1,T2>& lhs, const std::pair<T1,T2>& rhs) {
    return lhs.first<rhs.first || (!(rhs.first<lhs.first) && lhs.second<rhs.second);
}