std::set_union
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <algorithm>
|
||
template< class InputIt1, class InputIt2, class OutputIt > OutputIt set_union( InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, OutputIt d_first ); |
(1) | |
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 ); |
(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, если первый аргумент "меньше", чем второй.Определение сравнения должно быть эквивалентно:
Использование |
| Требования к типам | ||
-InputIt1 должен соответствовать требованиям InputIterator.
| ||
-InputIt2 должен соответствовать требованиям InputIterator.
| ||
-OutputIt должен соответствовать требованиям OutputIterator.
| ||
Возвращаемое значение
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Сложность
= std::distance(first1, last1) и N2 = std::distance(first2, last2).= std::distance(first1, last1) and N2 = std::distance(first2, last2).Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Возможная реализация
| Первый вариант |
|---|
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)
return std::copy(first1, last1, d_first);
if (*first2 < *first1) {
*d_first = *first2++;
} else {
*d_first = *first1;
if (!(*first1 < *first2))
++first2;
++first1;
}
}
return std::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)
return std::copy(first1, last1, d_first);
if (comp(*first2, *first1)) {
*d_first = *first2++;
} else {
*d_first = *first1;
if (!comp(*first1, *first2))
++first2;
++first1;
}
}
return std::copy(first2, last2, d_first);
}
|
Пример
| Этот раздел не завершён Причина: нет примера |
См. также
возвращает true, если одна последовательность является подпоследовательностью другой (шаблон функции) | |
| вычисляет разницу между двумя наборами (шаблон функции) | |
| вычисляет пересечение двух множеств (шаблон функции) | |
| вычисляет симметричную разницу между двумя наборами (шаблон функции) |