Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

std::sort() массива2 в соответствии с сортировкой массива1

34K
06 мая 2011 года
Lezz
2 / / 10.12.2007
Добрый день. Допустим, существует числовой массив data0, и дополнительно N массивов data1..dataN.
  • N-переменое;
  • размер элемента массива data1 в общем случае не равен размеру элемента массива data2

На форуме есть сравнительно похожая тема смысл которой сводится к организации сортировки vector<my_type> где my_type имеет постоянное число полей.

Однако, синтаксис обращения к std::sort позволяет "перегрузить" сравнение но не присвоение.

Я плохо себе представляю возможно ли создать (даже при постоянном числе массивов N) vector<my_type> без дублирования в памяти исходных массивов. Было бы интересно узнать, возможно ли это. (массив указателей так же не подходит, т.к. в реальной задаче data0 и data1 могут представлять из себя, например, 4ГБ UINT8; "лишней" памяти нет...)

Насколько я понимаю, мы приходим к необходимости перегрузить my_vector<my_type>.assign , чтобы "перехватывать" перемещения в 0м массиве и дублировать их для 1го-Nго. Или я неправиль мыслю?

Или вообще изобретаю велосипед? Неужели нет стандартных реализаций чего-то подобного? Возможно даже распараллеленные?
14
06 мая 2011 года
Phodopus
3.3K / / 19.06.2008
Чего тут параллелить то? Скорее всего неверно выбрано представление данных в программе. Например, должно быть не N массивов а один массив структур, с N полями.
34K
06 мая 2011 года
Lezz
2 / / 10.12.2007
Представление данных выбирал не я ;)
ф-я пишется под матлаб (.mex), чем и задается представление входных данных. (Оно такое: http://www.mathworks.com/help/techdoc/apiref/mexfunction.html )
На матлабе то,что я хочу реализуется так:

 
Код:
[x_sorted,sort_indx]=sort(x);
y1_sorted =y1(sort_indx);
y2_sorted =y2(sort_indx);


однако, в упомянутом случае, если x- 4Гб uint8 , а 4*8=32 лишних гигабайт RAM(размер массива индексов) у вас не завалялось, это не очень эффективно.

Представление данных действительно неудачное... (хотя создать быстрый, не использующий лишней оперативки массив записей с N полями, где N - переменная я тоже, честно говоря, затрудняюсь...)

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

Параллелить можно, как мне кажется, в момент когда сортируемая часть массива умещается в кеше ядра, например, для Merge_sort я думаю, выигрыш будет...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог