7

std :: multisetについて別の質問をしましたが、今では十分な理解が必要であり、インターネットでこれ以上複雑な例を見つけることができません。

std::multiset<A,B>ここでAとBのどのように機能し、どのような機能があるのか​​、またそれらのいずれかを省略できるかどうかを説明していただけますか?AまたはBをいくつかの変数に入れることはできますか?私はいくつかの短い例、または参照を本当に感謝します、

4

1 に答える 1

21

std::multisetクラステンプレートには、セットに格納されるオブジェクトのタイプを指定する最初のテンプレートパラメータと、比較ファンクタのタイプを指定する2番目のテンプレートパラメータがあります。今のところ、3番目のテンプレートパラメータは無視できます。

2番目のオプションのパラメーターであるは、厳密な弱順序Bを実装する必要があり、セット/マルチセットの順序付けに使用されます。この順序付けは、要素検索操作の対数の複雑さを保証するために必要です。次に例を示します。

struct A
{
  int x;
};

struct B
{
  bool operator()(const A& lhs, const A& rhs) const {
    return lhs.x < rhs.x;
  }
};

このクラスBには、がoperator()あります。これは、たとえば、呼び出すことができることを意味します

B comp;
A a1, a2;
bool a1lessThana2 = comp(a1, a2);

これは、セット/マルチセットが要素を正しい位置に配置し、2つの要素が同じであるかどうかを判断するために必要です。タイプにが存在する場合はoperator<、2番目のテンプレートパラメータを省略できます。

bool operator<(constA& lhs, const A& rhs) { return lhs.x < rhs.x; }

これは使用例です:

int main()
{
  std::multiset<A, B> m;
  A a1, a2;
  a1.x = 23;
  a2.x = 100;
  m.insert(a1);
  m.insert(a2);
}
于 2012-11-22T14:38:23.330 に答える