[x_sorted,sort_indx]=sort(x);
y1_sorted =y1(sort_indx);
y2_sorted =y2(sort_indx);
std::sort() массива2 в соответствии с сортировкой массива1
- 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го. Или я неправиль мыслю?
Или вообще изобретаю велосипед? Неужели нет стандартных реализаций чего-то подобного? Возможно даже распараллеленные?
Чего тут параллелить то? Скорее всего неверно выбрано представление данных в программе. Например, должно быть не N массивов а один массив структур, с N полями.
ф-я пишется под матлаб (.mex), чем и задается представление входных данных. (Оно такое: http://www.mathworks.com/help/techdoc/apiref/mexfunction.html )
На матлабе то,что я хочу реализуется так:
Код:
однако, в упомянутом случае, если x- 4Гб uint8 , а 4*8=32 лишних гигабайт RAM(размер массива индексов) у вас не завалялось, это не очень эффективно.
Представление данных действительно неудачное... (хотя создать быстрый, не использующий лишней оперативки массив записей с N полями, где N - переменная я тоже, честно говоря, затрудняюсь...)
Я просто исходил из того, чтоб использовать стандартный контейнер, на котором потом можно было бы опробовать несколько вариантов сортировки... Хотя судя по всему проще будет просто самому реализовать нужную сортировку.
Параллелить можно, как мне кажется, в момент когда сортируемая часть массива умещается в кеше ядра, например, для Merge_sort я думаю, выигрыш будет...