stl — мультимножество в переполнении стека

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

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

6

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]