Я задал в другом вопросе о проблеме в мультимножеством, но теперь я вижу, что мне нужно приличное понимание и я не могу найти более сложный пример в интернете.
Можете ли вы объяснить мне, может быть, в качестве примера, как multiset<A,B>
работает и какая функция здесь A и B, а также, если какая-либо из них может быть опущена? Могу ли я поставить A или B для некоторой переменной?
Я был бы очень признателен за краткий пример или ссылку,
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);
}
Других решений пока нет …