мультимножество в 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);
}