我在This之后继续这篇文章 我们有一个班级:
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());
目标集的大小为1,而src的大小为更多(在我的情况下为14)
我可能做错了什么?我非常重视你的评论。谢谢
答案 0 :(得分:1)
std::set
根据 键 跟踪元素。在比较器中,您有return a->getLaneID() < b->getLaneID();
。因此Lane ID
隐含地成为 键 。由于a
和b
具有相同的LaneID
,因此MyLaneConectorSorter(a, b)
和 MyLaneConectorSorter(b, a)
都会返回false
。
因此,您的set
不能包含多个LaneConnectior
LaneID
。
答案 1 :(得分:0)
有一种非常简单的方法可以在他们有机会暴露自己之前以这种方式捕捉问题。写单元测试!
我的猜测是你所有的LaneConnectors都从同一行开始。因此,GetLaneFrom() - &gt; GetLaneID()在所有LaneConnectors上产生相同的结果