我一直在尝试得出两个集合的交集,但是由于某些原因,在相同的输入下它会一直具有不同的结果。 std :: set_intersect将迭代器接收到两个集合(connBuilds,connectedSection):第一个具有5个值,第二个具有4个值。 这是集合的值(包含指向类的指针):
设置1:
设置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;
答案 0 :(得分:0)
std::set_intersection
不知道您的比较函数,您为集合指定了比较器,但是大多数<algorithm>
函数只是按预期在迭代器上工作。
您也应该使用适当的重载将比较器传递给函数本身:
template< class InputIt1, class InputIt2,
class OutputIt, class Compare >
OutputIt set_intersection( InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2,
OutputIt d_first, Compare comp );