0

我将在这之后继续这篇文章,我们 有一个课程:

class LaneConnector {
public:

    const Lane* getLaneFrom() const {
        return From;
    }
    const Lane* getLaneTo() const {
        return To;
    }

private:

    Lane* From;
    Lane* To;
}

和一个比较为的函子:

struct MyLaneConectorSorter {
  bool operator() (const LaneConnector* rhs, const LaneConnector* lhs) const
  {
    // you may want to put some null pointer checks in here
    const Lane* a = lhs->getLaneFrom();
    const Lane* b = rhs->getLaneFrom();
    return a->getLaneID() < b->getLaneID();
  }
};

最后是源和目标集:

const std::set<LaneConnector*> src = ..... ;

const std::set<LaneConnector*, MyLaneConectorSorter> dest(src.begin(), src.end(), MyLaneConectorSorter());

dest 集的大小将为 1,而 src 有更多(在我的情况下为 14)

我可能做错了什么?我重视你的善意评论。谢谢

4

2 回答 2

1

std::set根据key跟踪元素。在您的比较器中,您有return a->getLaneID() < b->getLaneID();. 从而Lane ID隐含地成为关键。既然 ifabhave 相同LaneID,那么两者MyLaneConectorSorter(a, b) MyLaneConectorSorter(b, a)都返回false

因此,您set不能包含多个LaneConnectior相同的LaneID.

于 2012-09-25T07:46:29.093 回答
0

有一种非常简单的方法可以在他们有机会暴露自己之前以这种方式发现问题。编写单元测试!

我的猜测是你所有的 LaneConnector 都从同一行开始。因此,GetLaneFrom()->GetLaneID() 在所有 LaneConnector 上产生相同的结果

于 2012-09-25T07:22:34.833 回答