Как вывести set c
Перейти к содержимому

Как вывести set c

Как вывести содержимое set в цикле?

user avatar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ или задайте свой вопрос.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.13.42356

Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Контейнер set (множество)

Множество — это структура данных, эквивалентная множествам в математике. Множество состоит из различных элементов заданного типа и поддерживает операции добавления элемента в множество, удаления элемента из множества, проверка принадлежности элемента множеству. Одно и то же значение хранится в множестве только один раз.

Для представления множеств в библиотеке STL имеется контейнер set , который реализован при помощи сбалансированного двоичного дерева поиска (красно-черного дерева), поэтому множества в STL хранятся в виде упорядоченной структуры, что позволяет перебирать элементы множества в порядке возрастания их значений. Для использования контейнера set нужно подключить заголовочный файл <set> .

Подробней о возможностях контейнера set можно прочитать, например, на сайте cppreference.com.

В простейшем случае множество, например, данных типа int объявляется так:

Для добавления элемента в множество используется метод insert :

Для проверки принадлежности элемента множеству используется метод count . Этот метод возвращает количество вхождения передаваемого параметра в данный контейнер, но поскольку в множестве все элементы уникальные, то count для типа set всегда возвращает 0 или 1. То есть для проверки принадлежности значения x множеству S можно использовать следующий код:

Для удаления элемента используется метод erase . Ему можно передать значение элемента, итератор, указывающий на элемент или два итератора (в этом случае удаляется целый интервал элементов, содержащийся между заданными итераторами). Вот два способа удалить элемент x :

Метод size() возвращает количество элементов в множестве, метод empty() , возвращает логическое значение, равное true , если в множестве нет элементов, метод clear() удаляет все элементы из множества.

Итераторы

С итераторами контейнера set можно выполнять операции инкремента (что означает переход к следующему элементу) и декремента (переход к предыдущему элементу). Итераторы можно сравнивать на равенство и неравенство. Операции сравнения итераторов при помощи «<«, «<=», «>», «> page_code_style»>begin() , который возвращает итератор на первый элемент множества, и метод e nd() , который возвращает фиктивный итератор на элемет, следующий за последним элементом в множестве. Таким образом, вывести все элементы множества можно так:

set <int>::iterator it;

for (it = S.begin(); it != S.end(); ++it)

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

В стандарте C++11 разрешается перебор всех элементом множества при помощи range-based цикла:

for (auto elem: S)

Элементы также будут выведены в порядке возрастания.

Для вывода элементов в порядке убывания можно использовать reverse_iterator аналогично векторам:

for (auto it = S.rbegin(); it != S.rend(); ++it)

Функции удаления элементов могут принимать итератор в качестве параметра. В этом случае удаляется элемент, на который указывает итератор. Например, чтобы удалить наименьший элемент:

Но для удаления последнего (наибольшего) элемента в set нельзя использовать reverse_iterator, нужно взять обычный итератор, указывающий на end(), уменьшить и удалить:

auto it = S.begin();

Поиск элемента в set

Для поиска конкретного элемента в set используется метод find . Этот метод возвращает итератор на элемент, а если элемент не найден, то он возвращает итератор end() (т.е. на фиктивный элемент, следующий за последним элементом множества. Используя этот метод проверить принадлежность элемента множеству можно так:

Также есть методы lower_bound и upper_bound , которые находят первых элемент, больше или равный x и первый элемент, строго больший x (аналогично двоичному поиску элемента в массиве).

Эти методы также возвращают итераторы, а если таких элементов (больше или равных или строго больших) нет в множестве, они возвращают end() .

Например, удалить из set минимальный элемент, строго больший x можно так:

Класс set

Класс set контейнера стандартной библиотеки C++ используется для хранения и извлечения данных из коллекции. Значения элементов в элементе set являются уникальными и служат ключевыми значениями, по которым данные автоматически упорядочены. Значение элемента в элементе set не может быть изменено напрямую. Вместо этого старые значения необходимо удалить и вставить элементы с новыми значениями.

Синтаксис

Параметры

Key
Тип данных элемента для сохранения в наборе.

Traits
Тип, предоставляющий объект функции, который может сравнить два значения элемента как ключи сортировки, чтобы определить их относительный порядок в наборе. Этот аргумент является необязательным, а двоичный предикат less <Key> является значением по умолчанию.

В C++14 можно включить разнородный поиск, указав std::less<> std::greater<> или предикат без параметров типа. Дополнительные сведения см. в разделе разнородный поиск в ассоциативных контейнерах .

Allocator
Тип, представляющий сохраненный объект распределителя, который инкапсулирует сведения о выделении и освобождении памяти для набора. Этот аргумент является необязательным, и в качестве значения по умолчанию используется allocator<Key> .

Комментарии

Набор стандартной библиотеки C++ — это:

Ассоциативный контейнер, который является контейнером переменного размера, поддерживающим эффективное получение значений элементов на основе значения соответствующего ключа. Кроме того, это простой ассоциативный контейнер, так как его значения элементов являются его ключевыми значениями.

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

Сортированный, поскольку его элементы упорядочены по значениям ключей в контейнере в соответствии с заданной функцией сравнения.

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

Набор также описывается как шаблон класса, так как функциональные возможности, которые он предоставляет, являются универсальными и независимыми от конкретного типа данных, содержащихся в виде элементов. Тип данных, подлежащий использованию, вместо этого определяется как параметры в шаблоне класса вместе с функцией и распределителем сравнения.

Выбор типа контейнера должен в общем случае производиться на основе типа поиска и вставки, который требуется приложению. Ассоциативные контейнеры оптимизированы для операций поиска, вставки и удаления. Функции-члены, которые явно поддерживают эти операции, эффективны, выполняя их в среднем пропорционально логарифму числа элементов в контейнере. Вставка элементов делает недействительными итераторы, а удаление элементов делает недействительными только те итераторы, которые указали на удаленные элементы.

Набор рекомендуется использовать в качестве ассоциативного контейнера, если условия, ассоциирующие значения с ключами, удовлетворяются приложением. Элементы набора являются уникальным и используются в качестве своих собственных ключей сортировки. Модель для этого типа структуры — упорядоченный список, например, ключевых слов, в котором слова не должны повторяться. Если допускается повторное использование слов, то подходящей структурой контейнера будет multiset. Если значения вносятся в список уникальных ключевых слов, сопоставление является подходящей структурой для размещения этих данных. Если вместо этого ключи не являются уникальными, то многофакторная карта будет контейнером выбора.

Набор упорядочивает последовательность, которую он контролирует, вызывая хранимый объект функции типа key_compare . Этот сохраненный объект представляет собой функцию сравнения, доступ к ней можно получить путем вызова функции-члена key_comp . Как правило, элементы должны быть просто меньше, чем сравнимы, чтобы установить этот порядок, чтобы, учитывая любые два элемента, можно определить, что они эквивалентны (в том смысле, что ни меньше другого), либо что один из них меньше другого. Это приводит к упорядочению неравнозначных элементов. С более технической точки зрения, функция сравнения является бинарным предикатом, который вызывает строгого слабое упорядочение в стандартном математически смысле. Двоичный предикат f(x,y) — это объект функции, имеющий два объекта аргумента x и y , а также возвращаемое значение true или false . Порядок, накладываемый на набор, является строгим слабым упорядочением, если двоичный предикат имеет значение irreflexive, antisymmetric и транзитивно, а если эквивалентность транзитивна, где два объекта x и y определяются как эквивалентные, если обаfx,y и f(y,x) имеют значение false. Если более строгое условие равенства между ключами заменяет условие эквивалентности, порядок становится общим (т.е. все элементы упорядочиваются относительно друг друга), и сопоставленные ключи будут неотличимы друг от друга.

В C++14 можно включить разнородный поиск, указав std::less<> std::greater<> или предикат без параметров типа. Дополнительные сведения см. в разделе разнородный поиск в ассоциативных контейнерах .

Итератор, предоставляемый классом set, является двунаправленным итератором, но функции-члены insert класса и set имеют версии, которые принимают в качестве параметров шаблона более слабый входной итератор, требования к функциональным возможностям которого являются более минимальными, чем те, которые гарантированы классом двунаправленных итераторов. Различные концепции итераторов образуют семейство, связанное уточнениями функциональности. Каждая концепция итератора имеет собственный набор требований, а алгоритмы, работающие с ними, должны ограничивать свои предположения согласно требованиям, предоставляемым этим типом итератора. Можно предположить, что итератор ввода может быть разыменован для обращения к определенному объекту и инкрементирован до следующего итератора в последовательности. Это минимальный набор функциональных возможностей, но достаточно, чтобы иметь возможность осмысленно говорить о диапазоне итераторов [ First , ) Last в контексте функций-членов класса.

Конструкторы

Имя Описание
set Создает набор, который является пустым или копией части или целого другого набора.

Определения типов

Имя Описание
allocator_type Тип, представляющий класс allocator для объекта набора.
const_iterator Тип, предоставляющий двунаправленный итератор, который может считывать тот или иной элемент const в наборе.
const_pointer Тип, предоставляющий указатель на элемент const в наборе.
const_reference Тип, предоставляющий ссылку на const элемент, хранящийся в наборе для операций чтения и выполнения const операций.
const_reverse_iterator Тип, предоставляющий двунаправленный итератор, который может считывать любой элемент const в наборе.
difference_type Тип целого числа со знаком, пригодный для использования в качестве представления количества элементов в наборе в диапазоне между элементами, на которые указывают итераторы.
iterator Тип, предоставляющий двунаправленный итератор, который может считывать или изменять любой элемент в наборе.
key_compare Тип, предоставляющий объект функции, который может сравнить два ключа сортировки для определения относительного порядка двух элементов в наборе.
key_type Тип, описывающий объект, сохраненный как элемент набора в смысле его возможностей, присущих ключу сортировки.
pointer Тип, предоставляющий указатель на элемент в наборе.
reference Тип, предоставляющий ссылку на элемент, хранящийся в наборе.
reverse_iterator Тип, предоставляющий двунаправленный итератор, который может считывать или изменять элемент в обращенном наборе.
size_type Тип целого числа без знака, который может представлять число элементов в наборе.
value_compare Тип, предоставляющий объект функции, который может сравнить два элемента, чтобы определить их относительный порядок в наборе.
value_type Тип, описывающий объект, сохраненный как элемент набора в смысле его возможностей, присущих значению.

Функции

Имя Описание
begin Возвращает итератор, обращающийся к первому элементу в set .
cbegin Возвращает итератор const, обращающийся к первому элементу в set .
cend Возвращает итератор const, который обращается к месту, следующему за последним элементом в set .
clear Стирает все элементы в set .
contains C++20 Проверьте, есть ли элемент с указанным ключом в элементе set .
count Возвращает число элементов в контейнере set , ключи которых соответствуют ключу, заданному параметром.
crbegin Возвращает итератор const, который обращается к первому элементу в обращенном контейнере set .
crend Возвращает итератор const, который обращается к месту, следующему за последним элементом в обращенном контейнере set .
emplace Вставляет созданный на месте элемент в set .
emplace_hint Вставляет созданный на месте элемент в set с подсказкой о размещении.
empty Проверяет, пуст ли set .
end Возвращает итератор, который обращается к месту, следующему за последним элементом в контейнере set .
equal_range Возвращает пару итераторов соответственно на первый элемент в set с ключом, который больше, чем указанный ключ, и на первый элемент в set с ключом, который больше или равен данному ключу.
erase Удаляет элемент или диапазон элементов в наборе с заданных позиций или удаляет элементы, соответствующие заданному ключу.
find Возвращает итератор, адресующий расположение элемента в наборе set с ключом, эквивалентным указанному ключу.
get_allocator Возвращает копию объекта allocator , который используется для создания контейнера set .
insert Вставляет элемент или диапазон элементов в set .
key_comp Извлекает копию объекта сравнения, который используется для упорядочивания ключей в контейнере set .
lower_bound Возвращает итератор, указывающий на первый элемент в наборе с ключом, который больше или равен указанному ключу.
max_size Возвращает максимальную длину set .
rbegin Возвращает итератор, который обращается к первому элементу в обращенном контейнере set .
rend Возвращает итератор, который обращается к месту, следующему за последним элементом в обращенном контейнере set .
size Возвращает количество элементов в контейнере set .
swap Выполняет обмен элементами между двумя объектами set .
upper_bound Возвращает итератор, указывающий на первый элемент в set с ключом, который больше указанного ключа.
value_comp Извлекает копию объекта сравнения, который используется для упорядочивания значений элементов в наборе set .

Операторы

Имя Описание
operator= Заменяет элементы набора копией другого набора.

allocator_type

Тип, представляющий класс распределителя для объекта-набора.

Комментарии

allocator_type является синонимом для параметра-шаблона Allocator .

Возвращает объект-функцию, которую мультинабор использует для упорядочивания своих элементов, который является параметром-шаблоном Allocator .

Дополнительные сведения Allocator см. в разделе set «Примечания» раздела «Класс».

Например, .

Пример использования см. в примере get_allocator allocator_type .

begin

Возвращает итератор, обращающийся к первому элементу в наборе.

Возвращаемое значение

Двунаправленный итератор, адресующий первый элемент в наборе или положение после пустого набора.

Комментарии

Если возвращаемое значение begin присваивается объекту const_iterator , элементы в объекте set не могут быть изменены. Если возвращаемое значение begin присваивается объекту iterator , можно изменить элементы в объекте set.

Например, .

cbegin

Возвращает итератор const , направленный на первый элемент в диапазоне.

Возвращаемое значение

Итератор двунаправленного доступа const , который указывает на первый элемент диапазона или расположение прямо за концом пустого диапазона ( cbegin() == cend() для пустого диапазона).

Комментарии

При возвращаемом значении cbegin элементы в диапазоне не могут быть изменены.

Эту функцию-член можно использовать вместо функции-члена begin() , чтобы гарантировать, что возвращаемое значение будет const_iterator . Как правило, он используется в сочетании с ключевым словом вычета auto типов, как показано в следующем примере. В этом примере предположим, что Container является изменяемым контейнером (не const ) любого типа, который поддерживает begin() и cbegin() .

Возвращает итератор const , который обращается к месту, следующему сразу за последним элементом в диапазоне.

Возвращаемое значение

Итератор двунаправленного доступа const , который указывает на позицию сразу за концом диапазона.

Комментарии

cend используется для проверки того, прошел ли итератор конец диапазона.

Эту функцию-член можно использовать вместо функции-члена end() , чтобы гарантировать, что возвращаемое значение будет const_iterator . Как правило, он используется в сочетании с ключевым словом вычета auto типов, как показано в следующем примере. В этом примере предположим, что Container является изменяемым контейнером (не const ) любого типа, который поддерживает end() и cend() .

Возвращаемое cend значение не должно быть разыменовывано.

clear

Стирает все элементы в наборе.

Например, .

const_iterator

Тип, предоставляющий двунаправленный итератор, который может считывать тот или иной элемент const в наборе.

Комментарии

Тип const_iterator нельзя использовать для изменения значения элемента.

Например, .

Пример использования см. в примере begin const_iterator .

const_pointer

Тип, предоставляющий указатель на элемент const в наборе.

Комментарии

Тип const_pointer нельзя использовать для изменения значения элемента.

В большинстве случаев const_iterator следует использовать для доступа к элементам в объекте набора const.

const_reference

Тип, предоставляющий ссылку на const элемент, хранящийся в наборе для операций чтения и выполнения const .

Например, .

const_reverse_iterator

Тип, предоставляющий двунаправленный итератор, который может считывать любой элемент const в наборе.

Комментарии

Тип const_reverse_iterator не может изменить значение элемента и используется для итерации по набору в обратном направлении.

Например, .

rend Пример объявления и использования const_reverse_iterator .

contains

Проверьте, есть ли элемент с указанным ключом в элементе set .

Параметры

key
Ключевое значение элемента для поиска.

Возвращаемое значение

true Значение , если элемент найден в ; set false в противном случае.

Комментарии

contains() является новым в C++20. Чтобы использовать его, укажите /std:c++20 параметр компилятора или более поздней версии.

template<class K> bool contains(const K& key) const только принимает участие в разрешении перегрузки, если key_compare он является прозрачным. Дополнительные сведения см. в разделе «Разнородный поиск» в ассоциативных контейнерах .

Например, .

count

Возвращает число элементов в наборе, ключи которых соответствуют ключу, заданному параметром.

Параметры

key
Ключ для сравнения с ключами элементов набора.

Возвращаемое значение

1, если набор содержит элемент, ключ сортировки которого совпадает с ключом параметра. 0, если набор не содержит элемент с соответствующим ключом.

Комментарии

Функция-член возвращает число элементов в следующем диапазоне:

[ lower_bound( key ), upper_bound( key ) ).

Например, .

В следующем примере показано использование set::count функции-члена.

crbegin

Возвращает итератор const, который обращается к первому элементу в обращенном наборе.

Возвращаемое значение

Константный обратный двунаправленный итератор, адресующий первый элемент в обратном наборе или элемент, который был последним элементом в наборе до изменения его порядка на противоположный.

Комментарии

crbegin используется с обратным набором так же, как begin и с набором.

Возвращаемое значение crbegin объекта set невозможно изменить.

Например, .

crend

Возвращает итератор const, который обращается к месту, следующему за последним элементом в обращенном наборе.

Возвращаемое значение

Константный обратный двунаправленный итератор, адресующий расположение после последнего элемента в обратном наборе (расположение перед первым элементом в наборе до изменения его порядка на обратный).

Комментарии

crend используется с обратным набором так же, как end и с набором.

Возвращаемое значение crend объекта set невозможно изменить. Возвращаемое crend значение не должно быть разыменовывано.

crend используется, чтобы проверить, достиг ли обратный итератор конца набора.

Например, .

difference_type

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

Комментарии

difference_type — тип, возвращаемый при вычитании или приращении через итераторы контейнера. Обычно difference_type используется для представления числа элементов в диапазоне [первый, последний) между итераторами first и last включает элемент, на который указывает first и диапазон элементов до, но не включая, элемент, на который указывает last .

Хотя difference_type он доступен для всех итераторов, удовлетворяющих требованиям входного итератора, который включает класс двунаправленных итераторов, поддерживаемых обратимыми контейнерами, такими как набор, вычитание между итераторами поддерживается только итераторами произвольного доступа, предоставляемыми контейнером произвольного доступа, например вектором.

Например, .

emplace

Вставляет элемент, созданный на месте (операции копирования или перемещения не выполняются).

Параметры

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

Возвращаемое значение

Логический pair компонент которого возвращает значение true, если вставка была выполнена, и значение false, если карта уже содержала элемент, значение которого имело эквивалентное значение в порядке. Компонент итератора пары возвращаемых значений возвращает адрес, где был вставлен новый элемент (если компонент bool имеет значение true) или где уже находился элемент (если компонент bool имеет значение false).

Комментарии

Эта функция не делает недействительными никакие итераторы или ссылки.

При создании исключения состояние контейнера не изменяется во время помещения.

Например, .

emplace_hint

Вставляет созданный элемент на место (операции копирования или перемещения не выполняются) с указанием о размещении.

Параметры

args
Аргументы, передаваемые для создания элемента, который будет вставлен в набор, кроме ситуации, когда набор уже содержит этот элемент или, в более общем случае, кроме ситуации, когда набор уже содержит элемент, ключ которого правильно упорядочен.

where
Место начала поиска правильной точки вставки. (Если эта точка находится непосредственно перед where , вставка может быть выполнена в постоянном времени с поправкой на амортизацию, а не в логарифмическом времени.)

Возвращаемое значение

Итератор, указывающий на вновь вставленный элемент.

Если не удалось вставить элемент, так как он уже существует, возвращается итератор на существующий элемент.

Комментарии

Эта функция не делает недействительными никакие итераторы или ссылки.

При создании исключения состояние контейнера не изменяется во время помещения.

Например, .

empty

Проверяет, пуст ли набор.

Возвращаемое значение

true if the set is empty; false if the set is nonempty.

Например, .

Возврат итератора после конца.

Возвращаемое значение

Итератор после конца. Если набор пуст, то set::end() == set::begin() .

Комментарии

end используется для проверки того, прошел ли итератор конец набора.

Возвращаемое end значение не должно быть разыменовывано.

Пример кода см. в разделе set::find .

equal_range

Возвращает пару итераторов соответственно на первый элемент в наборе с ключом, который не меньше, чем указанный ключ, и на первый элемент в наборе с ключом, который больше данного ключа.

Параметры

key
Ключ-аргумент, который будет сравниваться с ключом сортировки элемента из набора, в котором выполняется поиск.

Возвращаемое значение

Пара итераторов, где первый является lower_bound ключом, а второй — upper_bound ключом.

Для доступа к первому итератору пары pr , возвращаемой функцией-членом, нужно использовать pr . сначала и для разыменования итератора нижней границы используйте *( pr . во-первых). Для доступа ко второму итератору пары pr , возвращаемой функцией-членом, нужно использовать pr . second, а для разыменования итератора верхней границы используйте *( pr . второе).

Например, .

erase

Удаляет элемент или диапазон элементов в наборе с заданных позиций или удаляет элементы, соответствующие заданному ключу.

Параметры

Where
Положение удаляемого элемента.

First
Положение первого удаляемого элемента.

Last
Позиция после последнего элемента для удаления.

Key
Значение ключа удаляемых элементов.

Возвращаемое значение

Для первых двух функций-членов это двунаправленный итератор, обозначающий первый элемент, остающийся после любых удаленных элементов, или элемент в конце набора, если таких элементов нет.

Третья функция-член возвращает количество элементов, которые были удалены из набора.

Например, .

Возвращает итератор, ссылающийся на элемент в наборе, ключ которого эквивалентен заданному ключу.

Параметры

key
Значение ключа, с которым сравнивается ключ сортировки элемента из набора, по которому выполняется поиск.

Возвращаемое значение

Итератор, ссылающийся на расположение элемента с указанным ключом или на расположение элемента после последнего элемента в наборе ( set::end() ), если для ключа не найдено совпадений.

Комментарии

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

Если возвращаемое значение find присваивается объекту const_iterator , объект set нельзя изменить. Если возвращаемое значение find присваивается объекту iterator , можно изменить объект set.

Например, .

get_allocator

Возвращает копию объекта-распределителя, использованного для создания набора.

Возвращаемое значение

Распределитель, использующийся набор для управления памятью, который является параметром-шаблоном Allocator .

Дополнительные сведения Allocator см. в разделе set «Примечания» раздела «Класс».

Комментарии

Распределители для класса набора определяют, как этот класс управляет хранилищем. Для большинства задач программирования достаточно иметь распределители по умолчанию, поставляемые вместе с классами контейнеров стандартной библиотеки C++. Написание и использование собственного класса распределителя требует расширенных навыков работы с C++.

Например, .

insert

Вставляет элемент или диапазон элементов в набор.

Параметры

Val
Значение элемента, вставляемого в набор, если оно уже не содержит элемент, значение которого эквивалентно упорядочено.

Where
Место начала поиска правильной точки вставки. (Если эта точка непосредственно предшествует месту, вставка может происходить в амортизированном времени константы вместо логарифмического времени.)

ValTy
Параметр шаблона, задающий тип аргумента, который набор может использовать для создания элемента value_type , а в качестве аргумента — идеальный аргумент.

First
Позиция первого элемента, который следует скопировать.

Last
Позиция непосредственно перед последним элементом, который следует скопировать.

InputIterator
Аргумент функции шаблона, который соответствует требованиям входного итератора , указывающего на элементы типа, которые можно использовать для создания value_type объектов.

IList
Объект initializer_list , из которого копируются элементы.

Возвращаемое значение

Функции-члены с одним элементом (1) и (2) возвращают pair значение, компонент которого bool имеет значение true, если вставка была выполнена, и значение false, если набор уже содержал элемент эквивалентного значения в порядке. Компонент итератора пары возвращаемых значений указывает на вставленный элемент, если значение компонента bool равно true, или на существующий элемент, если значение компонента bool равно false.

Одноэлеметные функции-члены с подсказкой (3) и (4) возвращают итератор, который указывает на позицию, где новый элемент был вставлен, или, если элемент с эквивалентным ключом уже существует, указывает на существующий элемент.

Комментарии

Эта функция не делает никакие итераторы, указатели или ссылки недействительными.

Во время вставки только одного элемента, если возникает исключение, состояние контейнера не изменяется. Если во время вставки нескольких элементов вызывается исключение, контейнер остается в неопределенном, но допустимом состоянии.

Для доступа к компоненту итератора pair pr , возвращаемого одноэлементными функциями-членами, используйте pr.first . Для разыменования итератора в возвращенной паре используйте *pr.first , чтобы получить элемент. Для доступа к компоненту bool используйте pr.second . См. пример кода далее в этой статье.

Контейнер value_type — это определение типа, принадлежащее контейнеру, а для набора set<V>::value_type — тип const V .

Функция-член диапазона (5) вставляет последовательность значений элементов в набор, соответствующий каждому элементу, адресуемом итератором в диапазоне [First, Last) , Last поэтому не вставляется. Контейнер функции-члена end() ссылается на позицию сразу после последнего элемента в контейнере. Например, оператор s.insert(v.begin(), v.end()); пытается вставить все элементы v в s . Вставляются только элементы с уникальными значениями в диапазоне. Повторяющиеся значения игнорируются. Чтобы увидеть, какие элементы отклонены, используйте одноэлементные версии insert .

Функция-член списка инициализатора (6) использует initializer_list для копирования элементов в набор.

Для вставки элемента, созданного на месте, то есть операции копирования или перемещения не выполняются, см set::emplace . и set::emplace_hint .

Например, .

iterator

Тип, предоставляющий константный двунаправленный итератор, который может читать любой элемент в наборе.

Например, .

begin Пример объявления и использования iterator .

key_comp

Извлекает копию объекта сравнения, который используется для упорядочивания ключей в наборе.

Возвращаемое значение

Возвращает объект-функцию, которую набор использует для упорядочивания своих элементов, что является параметром-шаблоном Traits .

Дополнительные сведения см Traits . в set разделе «Класс «.

Комментарии

Сохраненный объект определяет функцию-член:

bool operator()(const Key, const Key& _xVal & _yVal );

возвращает значение true , если _xVal предшествует и не равно _yVal в порядке сортировки.

Оба key_compare и value_compare являются синонимами для параметра Traits шаблона. Оба типа предоставляются для классов набора и нескольких наборов, где они идентичны, для совместимости с классами карт и несколькими картами, где они отличаются.

Например, .

key_compare

Тип, предоставляющий объект функции, который может сравнить два ключа сортировки для определения относительного порядка двух элементов в наборе.

Комментарии

key_compare является синонимом для параметра-шаблона Traits .

Дополнительные сведения см Traits . в set разделе «Класс «.

Оба key_compare и value_compare являются синонимами для параметра Traits шаблона. Оба типа предоставляются для классов набора и нескольких наборов, где они идентичны, для совместимости с классами карт и несколькими картами, где они отличаются.

Например, .

Пример объявления и использования key_compare см. в примере key_comp .

key_type

Тип, описывающий объект, сохраненный как элемент набора в смысле его возможностей, присущих ключу сортировки.

Комментарии

key_type является синонимом для параметра-шаблона Key .

Дополнительные сведения Key см. в разделе set «Примечания» раздела «Класс».

Оба key_type и value_type являются синонимами для параметра Key шаблона. Оба типа предоставляются для классов набора и нескольких наборов, где они идентичны, для совместимости с классами карт и несколькими картами, где они отличаются.

Например, .

Пример объявления и использования key_type см. в примере value_type .

lower_bound

Возвращает итератор, указывающий на первый элемент в наборе с ключом, который больше или равен указанному ключу.

Параметры

key
Ключ-аргумент, который будет сравниваться с ключом сортировки элемента из набора, в котором выполняется поиск.

Возвращаемое значение

Итератор или const_iterator , который адресует положение элемента в наборе с ключом, который равен ключу-аргументу или больше него, либо адресует положение после последнего элемента в наборе, если соответствие для ключа не найдено.

Например, .

max_size

Возвращает максимальную длину набора.

Возвращаемое значение

Максимально возможная длина набора.

Например, .

operator=

Заменяет элементы этого set элементами из другого set .

Параметры

right
set , предоставляющий новые элементы для назначения set .

Комментарии

Первая версия operator= использует ссылку lvalue для right , чтобы копировать элементы из right в set .

Вторая версия использует ссылку rvalue для правого значения. Она перемещает элементы из right в set .

Все элементы в этом set до выполнения функции оператора отбрасываются.

Например, .

pointer

Тип, предоставляющий указатель на элемент в наборе.

Комментарии

Тип pointer можно использовать для изменения значения элемента.

В большинстве случаев iterator следует использовать для доступа к элементам в объекте set.

rbegin

Возвращает итератор, который обращается к первому элементу в обращенном наборе.

Возвращаемое значение

Обратный двунаправленный итератор, адресующий первый элемент в обратном наборе или элемент, который был последним элементом в наборе до изменения его порядка на противоположный.

Комментарии

rbegin используется с обратным набором так же, как begin и с набором.

Если возвращаемое значение rbegin присваивается объекту const_reverse_iterator , объект set нельзя изменить. Если возвращенное значение rbegin назначается reverse_iterator , то объект-набор можно изменить.

rbegin можно использовать для последовательного прохождения по списку в обратную сторону.

Например, .

reference

Тип, предоставляющий ссылку на элемент, хранящийся в наборе.

Например, .

Возвращает итератор, который обращается к месту, следующему за последним элементом в обращенном наборе.

Возвращаемое значение

Обратный двунаправленный итератор, адресующий расположение после последнего элемента в обратном наборе (расположение перед первым элементом в наборе до изменения его порядка на обратный).

Комментарии

rend используется с обратным набором так же, как end и с набором.

Если возвращаемое значение rend присваивается объекту const_reverse_iterator , объект set нельзя изменить. Если возвращенное значение rend назначается reverse_iterator , то объект-набор можно изменить. Возвращаемое rend значение не должно быть разыменовывано.

rend используется, чтобы проверить, достиг ли обратный итератор конца набора.

Например, .

reverse_iterator

Тип, предоставляющий двунаправленный итератор, который может считывать или изменять элемент в обращенном наборе.

Комментарии

Тип reverse_iterator используется для итерации по набору в обратном направлении.

Например, .

Пример объявления и использования reverse_iterator см. в примере rbegin .

Создает набор, который является пустым или копией части или целого другого набора.

Параметры

Al
Класс распределителя хранилища, используемый для этого объекта набора, который по умолчанию используется Allocator .

Comp
Функция сравнения типа const Traits используется для упорядочивания элементов в наборе, который по умолчанию имеет значение Compare .

Rght
Набор, для которого создаваемый набор станет копией.

First
Положение первого элемента в диапазоне копируемых элементов.

Last
Положение первого элемента после диапазона копируемых элементов.

IList
Объект initializer_list, из которого копируются элементы.

Комментарии

Все конструкторы хранят тип объекта распределителя, который управляет хранилищем памяти для набора и может быть возвращен путем вызова get_allocator . Параметр-распределитель часто не указывается в объявлениях класса и в макросах предварительной обработки, используемых для замены альтернативных распределителей.

Все конструкторы инициализируют свои наборы.

Все конструкторы хранят объект функции типа Traits , который используется для установления порядка между ключами набора и которые позже могут быть возвращены путем вызова key_comp .

Первые три конструктора указывают пустой начальный набор, второй — тип функции сравнения ( comp ), который будет использоваться при определении порядка элементов и третьего явного указания типа распределителя ( al ) для использования. Ключевое слово explicit подавляет определенные виды автоматического преобразования типов.

Четвертый конструктор указывает копию набора right .

Следующие три конструктора используют initializer_list, чтобы указать элементы.

Следующие три конструктора копируют диапазон [ first , last ) набора с увеличением явности при указании типа функции сравнения класса Traits и Allocator .

Восьмой конструктор указывает копию набора путем перемещения right .

Например, .

Возвращает количество элементов в наборе.

Возвращаемое значение

Текущая длина набора.

Например, .

size_type

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

Например, .

Пример объявления и использования см. в примере size size_type

Обмен элементами между двумя наборами.

Параметры

right
Набор-аргумент предоставляет элементы для обмена с целевым набором.

Комментарии

Функция-член не делает недействительными никакие ссылки, указатели или итераторы, обозначающие элементы в двух наборах, между которыми выполняется обмен элементами.

Например, .

upper_bound

Возвращает итератор, указывающий на первый элемент в наборе с ключом, который больше указанного ключа.

Параметры

key
Ключ-аргумент, который будет сравниваться с ключом сортировки элемента из набора, в котором выполняется поиск.

Возвращаемое значение

const_iterator Или iterator адресует расположение элемента в наборе, который с ключом больше ключа аргумента или адресует расположение после последнего элемента в наборе, если совпадение не найдено для ключа.

Например, .

value_comp

Извлекает копию объекта сравнения, который используется для упорядочивания значений элементов в наборе.

Возвращаемое значение

Возвращает объект-функцию, которую набор использует для упорядочивания своих элементов, что является параметром-шаблоном Traits .

Дополнительные сведения см Traits . в set разделе «Класс «.

Комментарии

Сохраненный объект определяет функцию-член:

оператор bool (const Key, const Key& _xVal & _yVal );

возвращает значение true , если _xVal предшествует и не равно _yVal в порядке сортировки.

Оба value_compare и key_compare являются синонимами для параметра Traits шаблона. Оба типа предоставляются для классов набора и нескольких наборов, где они идентичны, для совместимости с классами карт и несколькими картами, где они отличаются.

Например, .

value_compare

Тип, предоставляющий объект функции, который может сравнить значениях двух элементов, чтобы определить их относительный порядок в наборе.

Комментарии

value_compare является синонимом для параметра-шаблона Traits .

Дополнительные сведения см Traits . в set разделе «Класс «.

Оба key_compare и value_compare являются синонимами для параметра Traits шаблона. Оба типа предоставляются для классов набора и нескольких наборов, где они идентичны, для совместимости с классами карт и несколькими картами, где они отличаются.

Например, .

Пример объявления и использования value_compare см. в примере value_comp .

value_type

Тип, описывающий объект, который сохранен как элемент набора в смысле его возможностей, присущих значению.

Комментарии

value_type является синонимом для параметра-шаблона Key .

Дополнительные сведения Key см. в разделе set «Примечания» раздела «Класс».

Оба key_type и value_type являются синонимами для параметра Key шаблона. Оба типа предоставляются для классов набора и нескольких наборов, где они идентичны, для совместимости с классами карт и несколькими картами, где они отличаются.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *