std::set_union
![]() | Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <algorithm> | ||
template<class InputIt1, class InputIt2, class OutputIt > OutputIt set_union( InputIt1 first1, InputIt1 last1, | (1) | |
template<class InputIt1, class InputIt2, class OutputIt, class Compare > | (2) | |
d_first
, состоящий из всех элементов, присутствующих в одном или обоих диапазонах отсортированы [first1, last1)
и [first2, last2)
. Первая версия ожидает, что обе входные диапазоны должны быть отсортированы с operator<, вторая версия ожидает, что они должны быть отсортированы с данной comp
функцию сравнения. Если некоторый элемент не найден m
раз в [first1, last1)
и n
раз в [first2, last2)
, то все m
элементы будут скопированы из [first1, last1)
в d_first
, сохраняя порядок, и тогда точно std::max(n-m, 0) элементы будут скопированы из [first2, last2)
в d_first
, а также сохранение порядка. В результате диапазон не должен пересекаться с любым из входных диапазонов.d_first
consisting of all elements present in one or both sorted ranges [first1, last1)
and [first2, last2)
. The first version expects both input ranges to be sorted with operator<, the second version expects them to be sorted with the given comparison function comp
. If some element is found m
times in [first1, last1)
and n
times in [first2, last2)
, then all m
elements will be copied from [first1, last1)
to d_first
, preserving order, and then exactly std::max(n-m, 0) elements will be copied from [first2, last2)
to d_first
, also preserving order. The resulting range cannot overlap with either of the input ranges.Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править]Параметры
first1, last1 | — | Первый вход отсортированный диапазон Оригинал: the first input sorted range Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
first2, last2 | — | Второй вход отсортированный диапазон Оригинал: the second input sorted range Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
comp | — | объект функции сравнения (т.е. объект, удовлетворяющий требованиям Compare), который возвращает true, если первый аргумент "меньше", чем второй. Определение сравнения должно быть эквивалентно: bool cmp(const Type1 &a, const Type2 &b); Использование noexcept(начиная с C++11) желательно но не обязательно. Параметры не обязаны передаваться по const&, но не должны модифицироваться. Они должны быть способны принимать все значения типа (даже const) |
Требования к типам | ||
-InputIt1 должен соответствовать требованиям InputIterator . | ||
-InputIt2 должен соответствовать требованиям InputIterator . | ||
-OutputIt должен соответствовать требованиям OutputIterator . |
[править]Возвращаемое значение
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Сложность
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править]Возможная реализация
Первый вариант |
---|
template<class InputIt1, class InputIt2, class OutputIt> OutputIt set_union(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first){for(; first1 != last1;++d_first){if(first2 == last2)returnstd::copy(first1, last1, d_first);if(*first2 <*first1){*d_first =*first2++;}else{*d_first =*first1;if(!(*first1 <*first2))++first2;++first1;}}returnstd::copy(first2, last2, d_first);} |
Второй вариант |
template<class InputIt1, class InputIt2, class OutputIt, class Compare> OutputIt set_union(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first, Compare comp){for(; first1 != last1;++d_first){if(first2 == last2)returnstd::copy(first1, last1, d_first);if(comp(*first2, *first1)){*d_first =*first2++;}else{*d_first =*first1;if(!comp(*first1, *first2))++first2;++first1;}}returnstd::copy(first2, last2, d_first);} |
[править]Пример
Этот раздел не завершён Причина: нет примера |
[править]См. также
возвращает true, если одна последовательность является подпоследовательностью другой (шаблон функции) | |
вычисляет разницу между двумя наборами (шаблон функции) | |
вычисляет пересечение двух множеств (шаблон функции) | |
вычисляет симметричную разницу между двумя наборами (шаблон функции) |