Одной простой ошибкой является то, что вы должны проверять, что не равно концу.
set<Cell*> cellSet;
Cell* cell = new Cell();
if (cellSet.find(cell) != cellSet.end()) // Test NOT EQUAL to end
{
// Found item in set.
}
Но также следует помнить, что вы сравниваете не фактические значения ячейки, а указатель на объекты ячейки (которые могут быть, а могут и не совпадать с вашими). Обычно в C ++ вы не склонны хранить указатели в контейнерах, так как нет подразумеваемого владения указателем, но иногда это нормально.
Для фактического сравнения объектов вам нужно использовать find_if () и передать предикат (функтор).
struct PointerCellTest
{
Cell& m_lhs;
PointerCellTest(Cell* lhs): m_lhs(lhs) {}
bool operator()(Cell* rhs)
{
return lhs.<PLOP> == rhs.<PLOP>
}
};
if(find_if(cellSet.begin(),cellSet.end(),PointerCellTest(cell)) != cellSet.end())
{
// Found item in set.
}