2

タイトルが不明瞭で申し訳ありませんが、実際には自分の問題を簡潔に説明するタイトルを考えることができませんでした。

しかし、質問は簡単に述べることができます。Nodeクラスがあります。id_フィールドによってオブジェクト間の順序を維持したいと思います。Nodeクラスで<演算子をオーバーロードするか、multisetでComparatorオブジェクトを提供すると、multiset<Node>を作成するとコンテナ内の順序が正しく維持されることを知っています。しかし、multiset <Node *>コンテナーを宣言し、同じ動作を実現したいと思います。

これが私のNodeクラスの定義です:

class Node {
        int id_;
        ...
        public:
        Node() {
                ...
        }
        int getId() {
                return id_;
        }
        void setId(int id) {
                id_ = id;
        }
        ...
        bool operator<(const Node &input) {
                return (this->id_ < input.id_);
        }
};

私は何をしますか?

4

1 に答える 1

5

私はあなたが何を意味し、あなたが必要としているのはこれだと思います:

template <typename T, typename Pred = std::less<T>>
struct ptr_compare : Pred
{
    ptr_compare(Pred const & p = Pred()) : Pred(p) { }

    bool operator()(T const * p1, T const * p2) const
    {
        return Pred::operator()(*p1, *p2);
    }
};

typedef std::multiset<Node*, ptr_compare<Node>> node_ptr_set;

ptr_compareテンプレートは、バイナリ述語を必要とし、述語を間接的に適用する任意のコンテナーに使用できます。

于 2012-08-02T09:42:09.637 に答える