Я пытался получить пересечение двух множеств, но по какой-то причине он продолжает иметь разные результаты с одними и теми же входами.Std :: set_intersect получает итераторы для двух наборов (connBuilds, connectedSection): первый имеет 5 значений, а второй - 4. Вот значения наборов (содержащие указатели на класс):
Set1:
Набор 2:
Ожидаемый результатбудет набором, содержащим 4 общих значения между наборами, но результат меняется с каждым выполнением.Иногда результат верный, иногда нет.
Вот сегмент кода, где выполняется пересечение:
std::vector<Building *> v;
bool hasHC = false;
bool hasH = false;
ConnectedBuildings connBuilds = invertedBuildingsItr->second;
std::set_intersection(connectedSection.begin(), connectedSection.end(), connBuilds.begin(),
connBuilds.end(), std::back_inserter(v));
size_t currentSize = v.size();
Вот структура, используемая для сравнения указателей:
struct buildingPTRComp
{
bool operator()(Building *b1, Building *b2) const
{
return b1->getIdentifier() < b2->getIdentifier();
}
};
typedef std::set<Building *, buildingPTRComp> ConnectedBuildings;