C++ работает на "упакованных" массивах

Предположим, что у меня есть два, например, float массивы a а также b, int массив ключей k и шаблон mySortByKey моя собственная функция, работающая на одном массиве, что-то вроде

template<class T>
mySortByKey(int *k, T *a)

Есть ли возможность (например, использовать итераторы zip и кортежи некоторых видов), чтобы включить mySort работает одновременно на a а также b, чтобы их можно было одновременно заказывать по ключу k?

1 ответ

Решение

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

int keys[ARRAY_SIZE];
float a[ARRAY_SIZE];
float b[ARRAY_SIZE];

// Fill up the contents of keys, a, and b

// Create an array of indices.
int indices[ARRAY_SIZE];
for ( int i = 0; i < ARRAY_SIZE; ++i )
   indices[i] = i;

// Sort the indices using keys.
mySortByKey(keys, indices);

// Now access the arrays a and b indirectly, using the sorted array
// of indices as an intermediate object.
for ( int i = 0; i < ARRAY_SIZE; ++i )
{
   float fa = a[indices[i]];
   float fb = b[indices[i]];
}
Другие вопросы по тегам