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::setkeyに基づいて要素を追跡します。コンパレータにはreturn a->getLaneID() < b->getLaneID();. したがってLane ID、暗黙的にkeyになります。ifabは同じなので、LaneIDの両方が を返します。MyLaneConectorSorter(a, b) MyLaneConectorSorter(b, a)false

したがって、同じ をset複数含むことはできません。LaneConnectiorLaneID

于 2012-09-25T07:46:29.093 に答える
0

このような問題が顕在化する前に、問題をキャッチする非常に簡単な方法があります。単体テストを書きましょう!

私の推測では、すべての LaneConnectors が同じ行から開始されていると思います。したがって、GetLaneFrom()->GetLaneID() はすべての LaneConnector で同じ結果をもたらします。

于 2012-09-25T07:22:34.833 に答える