Как я могу настроить сравнение элементов в ptr_container? Используя ptr_set, я хотел бы определить функцию, которая проверяет равенство элементов. Тем не менее, определение
bool operator==(const Foo& other) (or a friend function)
не работает. Он просто не будет вызываться, хотя неупорядоченные контейнеры boost, с другой стороны, знают о перегруженных операторах == s. Предикаты а-ля:
struct FooEq
{
bool operator()(const Foo& foo1, const Foo& foo2) const
};
тоже не работает, и я не могу найти ссылку, которая описывает, как это сделать.
struct Foo
{
Foo(int i, int j) : _i(i), _j(j) {}
bool operator<(const Foo& other) const { return this->_i < other._i; }
bool operator==(const Foo& other) const
{
std::cout << "== involed";
return this->_j == other._j;
}
int _i;
int _j;
};
boost::ptr_set<Foo> foos;
std::cout << foos.size() << "\n";
foos.insert(new Foo(1, 2));
std::cout << foos.size() << "\n";
foos.insert(new Foo(2, 2));
std::cout << foos.size() << "\n";
Предполагается, что foos равны, поскольку для обоих j == 2 выполнено.
Заранее спасибо