2

確かに、オーバーロードされたクラスがありoperator<ます...

class Rectangle {
    // ...
    const inline bool operator< (const Rectangle &rhs) const {
        return x < rhs.x || (x == rhs.x && y < rhs.y);
    }
}

...set要素がスマートポインターでラップされている場合でも、このオーバーロードを使用しますか?

std::multiset<std::shared_ptr<Rectangle>> elements;
4

2 に答える 2

3

shared_ptr<T>のドロップイン置換として設計されているためT*、次のように動作します。

std::multiset<Rectangle*> elements;

つまり、メモリアドレスでソートされます。

基になる を使用する場合はoperator<、間接的に比較を行うコンパレータを指定する必要があります。[p,q]{*p < *q}

于 2013-09-01T22:25:22.157 に答える