Какова роль большего <int>в Сете? - PullRequest
0 голосов
/ 25 декабря 2018

При объявлении набора set <int, greater <int> > gquiz1; почему мы используем greater <int>.Я новичок в настройке, я ссылался на другие статьи, но они были не совсем убедительными.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

std::set - это контейнер, содержащий упорядоченный набор объектов.

Порядок расположения объектов определяется вторым аргументом.По умолчанию это std::less<Key>.См. определение std :: set для получения дополнительной информации.Однако вы можете переопределить аргумент по умолчанию, используя свой собственный тип Compare в качестве второго аргумента, как вы это сделали в своем опубликованном коде.

Например:

std::set<int> set1; // Use default compare class, std::less<int>
set1.insert(10);
set1.insert(5);
set1.insert(7);

Порядокобъектов в указанном выше контейнере будет 5, 7 и 10. Объекты в контейнере сортируются по возрастанию.

Если вы используете

std::set<int, std::greater<int>> set2;
set2.insert(10);
set2.insert(5);
set2.insert(7);

Порядок объектов внад контейнером будет 10, 7 и 5. Объекты в контейнере отсортированы по убыванию.

0 голосов
/ 25 декабря 2018

Объявление из std::set выглядит следующим образом:

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

Запись продолжает:

std::set является ассоциативнымКонтейнер, содержащий отсортированный набор уникальных объектов типа Key.Сортировка выполняется с использованием функции сравнения ключей Сравнить .

По умолчанию сравнение ключей выполняется с использованием std::less, что означает, что входящая запись являетсявставляется в первую позицию, где он меньше, чем элемент в наборе, с которым он сравнивается.

В вашем примере вставка выполняется с использованием сравнения std::greater, что приведет к набору, в которомзаписи сортируются в порядке напротив к регистру по умолчанию.

...