1

ユーザー定義のハッシュ関数と等式関数を備えた順序付けられていないマップがあります。

マップにすべての要素を追加した後、等式比較関数が呼び出された回数を数えたいと思います。これを行う簡単な方法はありますか?

4

1 に答える 1

2

カスタム等価関数でそれらを数えます:

struct equality_comparer : std::binary_function<MyType, MyType, bool> {
    static int counter_;

    bool operator()( MyType const& lhs, MyType const& rhs ) {
        ++counter_;
        return lhs == rhs;
    }
};
int equality_comparer::counter_ = 0;

そして、マップへの挿入が完了した後: equality_comparer::counter_ = 0.

@PiotrNyczで述べたように、これを使用できます:

struct equality_comparer : std::binary_function<MyType, MyType, bool> {
    mutable int counter_;
  //^^^^^^^
    equality_comparer() : counter_(0) {}
    bool operator()( MyType const& lhs, MyType const& rhs ) {
        ++counter_;
        return lhs == rhs;
    }
    void reset_counter() {counter_ = 0;}
};

次に、前のコードmyMap.key_eq().reset_counter()の代わりに使用して、カウンター値にアクセスできます。equality_comparer::counter_ = 0myMap.key_eq().counter_

于 2012-10-28T19:04:04.307 に答える