2014-02-04 4 views
-1

Мне нужна помощь. У меня есть 1-D массив со следующей информацией:Создайте массив из другого массива C++

1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19 

Как вы можете видеть, есть в общей сложности 24 элементов в массиве. Теперь первые два элемента (1, 17) можно рассматривать как пару, так что в основном мы имеем пару (1, 17), (2, 18), (3, 19) в одном блоке. И у нас есть всего 4 блока, которые дают массив выше.

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

1, 17, 1, 17, 1, 17, 1, 17, 2, 18, 2, 18, 2, 18, 2, 18, 3, 19, 3, 19, 3, 19, 3, 19. 

Как вы можете видеть, что я должен выбрать первую пару, вставить ее в 4 раза (4 является количество блоков, которые у нас есть), а затем перейти к следующей паре (2, 18), вставить ее 4 раза и продолжить.

Теперь количество блоков и количество пар могут быть динамическими. Например, если у меня есть 3 блока и 4 пары,

Оригинальный массив будет выглядеть следующим образом:

1, 17, 2, 18, 3, 19, 4, 20 1, 17, 2, 18, 3, 19, 4, 20, 1, 17, 2, 18, 3, 19, 4, 20 

И желаемая массив будет выглядеть следующим образом:

1, 17, 1, 17, 1, 17, 2, 18, 2, 18, 2, 18, 3, 19, 3, 19, 3, 19, 4, 20, 4, 20, 4, 20. 

Другой пример,

Если у меня есть два блока и пять пар:

Оригинальный массив будет:

1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 

Желаемая массив будет:

1, 17, 1, 17, 2, 18, 2, 18, 3, 19, 3, 19, 4, 20, 4, 20, 5, 21, 5, 21. 

Может кто-нибудь помочь мне с этим.? Я буду очень признателен.

Благодаря

+0

Я думаю, вы должны make_pair для каждого из двух элементов, вставить их в вектор, а затем сортировать его по первому элементу каждой пары. альтернативно просто вставьте пары (из каждых двух элементов) в мультимагу –

+6

Мы не генератор алгоритмов! –

+0

'std :: sort' на' std :: pair' ... – Jarod42

ответ

0

Hacky версия, которая может помочь:

#include <algorithm> 
#include <utility> 

int main(int argc, char *argv[]) 
{ 
    int array[] = {1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19, 1, 17, 2, 18, 3, 19}; 
    typedef std::pair<int, int> (p_t)[sizeof(array)/sizeof(array[0])/2]; 
    p_t &p = reinterpret_cast<p_t&>(array); 

    std::sort(std::begin(p), std::end(p)); 

    for (auto i : array) { 
     std::cout << i << " "; 
    } 
    return 0; 
} 
Смежные вопросы