мультимножество в C++

Я задал еще один вопрос о проблеме в multiset, но теперь я вижу, что мне нужно достойное понимание и не могу найти более сложный пример в интернете.

можете ли вы объяснить мне, может быть, exemplarize, как multiset<A,B> работает и какая функция здесь A и B, а также, если любой из них может быть опущен? Могу ли я поместить A или B в некоторую переменную? Я был бы очень признателен за короткий пример или ссылку,

1 ответов


на std::multiset шаблон класса имеет первый параметр шаблона, указывающий тип объектов, которые будут храниться в наборе, и второй, указывающий тип функтора сравнения. Третий параметр шаблона пока можно игнорировать.

второй, необязательный, параметр 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);

это необходимо для set / multiset для размещения элементов в правильном месте и выяснить, являются ли два элемента одинаковыми. Если есть operator< для вашего типа второй параметр шаблона можно опустить.

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);
}