Что такое же значение означает для std :: set?

В C ++ std :: set :: insert () вставляет значение только в том случае, если его еще нет с таким же значением. К тому же, означает ли это оператор == или это означает, для какого оператора< является ложным для любого заказа, или это означает что-то еще?

3

Решение

это означает тот, для которого оператор< ложно для любого заказа?

Да, если набор использует компаратор по умолчанию и сравнивает ключи, используя <, В общем, в заказанном контейнере с компаратором Compareдве клавиши k1 а также k2 рассматриваются как эквивалент если !Compare(k1,k2) && !Compare(k2,k1),

Ключи не требуются для реализации operator== или что-нибудь еще; они просто должны быть сравнимы, используя компаратор контейнера, чтобы дать строгий слабый порядок.

5

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

станд :: набор имеет аргумент шаблона с именем `Compare ‘, как в этой подписи:

template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;

Compare используется для определения порядка между элементами. Здесь по умолчанию less<Key> использует < оператор для сравнения двух ключей.

Если это помогает, вы можете думать о наборе как о std::map с бессмысленными значениями, т.е. std::set<int> можно рассматривать как std::map<int, int> где значения не имеют смысла.

2

Единственное сравнение, которое set разрешено выступать на T через тип функтора было дано сделать сравнение как часть шаблона. Таким образом, именно так он определяет эквивалентность.

Для каждого значения в setсравнение должно иметь значение true для одного из двух порядков между этим значением и новым. Если это ложно в обоих направлениях для любого значения, то оно не будет сохранено.

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