Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122

Сортировка двух векторов одновременно

05.12.2016, 13:39. Показов 3270. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

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

Понятно, что я могу написать свою собственную функцию quickSort и там делать одновременные преобразования а и b. Вопрос в другом: могу ли я сделать тоже самое с использованием алгоритмов STL и без привлечения дополнительной памяти? В идеале, хочется вот так:
C++
1
2
3
4
5
6
7
8
     vector<int> a, b;
     // a = {...}, b = {...}
 
    sort(a.begin(), a.end(), [&b]( ? x, ? y ) mutable {
                                          if ( a[x] < a[y] )
                                                swap(b[x], b[y]);
                                          return a[x] < a[y];
                                          });
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2016, 13:39
Ответы с готовыми решениями:

Сортировка двух векторов (имена и возраст)
Имеется вектор строк, которые обозначают имена, и вектор чисел, означающий их возрасты. Нужно написать функцию sort() которая бы...

Сортировка двух векторов, создание третьего и запись в файл
Необходимо отсортировать два вектора int таким образом чтобы сохранить результат в третий вектор, выбрав только те числа которые...

Как одновременно декларировать векторное и скалярное произведение векторов?
В обоих случаях умножается вектор на вектор. Нельзя же перегрузить по типу значения.

8
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
05.12.2016, 13:57
Что-то мне подсказывает что STL такое не сможет, пока ты два вектора не объединишь в матрицу.
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
05.12.2016, 14:02
А не проще хранить вектор пар?
C++
1
vector < pair<int, int> > a;
1
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
05.12.2016, 14:51  [ТС]
Это приведёт к дополнительному месту O(n), а этого как раз и хочется избежать. Или можно объединить в матрицу так, что будет занято только O(1) допольнительного места?

Т.е. вопрос на самом деле состоит в том, ЧТО именно передаёт алгоритм sort() в фунцию сравнения? Можно ли туда передать не значения, а, скажем, итераторы на сравниваемые элементы? Если можно, то мы просто используем std::distance и всё в шоколаде.

Добавлено через 1 минуту
Новичок, проще, но это приведёт к использованию дополнительного места, а этого хотелось бы избежать. А изначально передаются в фунцию именно два вектора. Ну, да, ну, вот такая задачка.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.12.2016, 14:54
Цитата Сообщение от Новичок Посмотреть сообщение
А не проще хранить вектор пар?
Действительно, автор как-то странно хранит отрезки, одна нога здесь, а другая там!
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
05.12.2016, 15:37
Цитата Сообщение от Kapex Посмотреть сообщение
Это приведёт к дополнительному месту O(n)
И почему это вдруг? Создали массив пар - одно число начало отрезка, другое число конец отрезка, т.е никакой лишней памяти. И вызвали std::sort для вектора. Если надо, можно свою функцию сравнения передать третьим параметром.
0
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
05.12.2016, 17:48  [ТС]
Новичок, если изначально в функцию передаётся два массива, то массив пар -- это уже дополнительное место. Чую, у этой задачи нет решения с исходными двумя массивами в терминах STL. Жаль ))
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
06.12.2016, 03:28
Цитата Сообщение от Kapex Посмотреть сообщение
если изначально в функцию передаётся два массива, то массив пар -- это уже дополнительное место
А изначально хранить отрезки не в двух массивах а в одном массиве пар никак нельзя?
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
06.12.2016, 07:21
Цитата Сообщение от Kapex Посмотреть сообщение
это уже дополнительное место
А зачем ты так рьяно место экономишь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2016, 07:21
Помогаю со студенческими работами здесь

Создать класс для обработки векторов разность векторов норму векторов
Создать класс для обработки векторов разность векторов норму векторов

Сортировка векторов
Пишу программу, которая считывает из файла все слова и записывает в векторы, при этом подсчитывается количество повторяющихся слов. ...

Слияние двух векторов
Дано два одномерных массива A и B. Помогите, пожалуйста с кодом: нужно соединить их в один массив C.

Сумма двух векторов
добрый вечер, имеется программа которая : &quot;Создать 2 вектора (массива) с 1000 элементами из случайных чисел. Сложить эти вектора....

Объединение двух векторов
почему не получается занести элементы в vector v ?? int main() { vector&lt;int&gt;v; vector&lt;int&gt;v1; vector&lt;int&gt;v2; for...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru