具有相同输入的c ++ set_intersection具有不同的结果

时间:2019-05-26 23:43:31

标签: c++ set intersection

我一直在尝试得出两个集合的交集,但是由于某些原因,在相同的输入下它会一直具有不同的结果。 std :: set_intersect将迭代器接收到两个集合(connBuilds,connectedSection):第一个具有5个值,第二个具有4个值。 这是集合的值(包含指向类的指针):

设置1:

Set 1

设置2:

Set 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;

1 个答案:

答案 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 );