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]];
}