Как отсортировать два или три массива одновременно? - PullRequest
0 голосов
/ 21 октября 2019

Я видел в C ++ 17 интересный способ сортировки, я хочу воссоздать его, используя только массивы

Есть способ, как разбить массив карт на 2 элемента, я хочу реализовать это с помощьютолько обычные массивы.

for (auto&& [key, value] : map)
    {

        cout << key << "\n" << endl;

        cout << value << "\n" << endl;

    }

Я пытаюсь повторить реализацию, используя два массива, затем я попытаюсь добавить 3 массива и т. д.

int64_t arr[2][4]
    {
        { 1,2,3,4 },
        { 2,3,1,0 }
    };

    for (auto&& [a, b] : arr[0], arr[1])
    {

        cout << b << "\n" << endl;

        cout << a << "\n" << endl;

    }

Возможно, это глупо, потому чторазмер массивов одинаков, и вы можете просто указать, сколько циклов повторять.

for (size_t i = 0; i < 4; i++)
    {
        cout << arr[0][i] << "\n" << endl;

        cout << arr[1][i] << "\n" << endl;
    }

Но мой эксперимент был создан в попытке ускорить код.

Вопросесть, можно ли как-то это сделать и будет ли работать быстрее?

for (auto&& [a, b] : arr[0], arr[1])

1 Ответ

0 голосов
/ 21 октября 2019

Это должно быть легко в C ++ 20 с добавлением диапазонов, но в то же время есть отдельная версия библиотеки range-v3 :

#include <iostream>
#include <range/v3/view/zip.hpp>

int main() {
  int arr[2][4]{{1, 2, 3, 4}, {2, 3, 1, 0}};

  for (const auto [a, b] : ranges::views::zip(arr[0], arr[1])) {
    std::cout << a << '\t' << b << '\n';
  }

  return 0;
}

Пример:

$ g++ -std=c++17 -O2 -Wall -Wextra -Irange-v3/include ziptest.cpp
$ ./a.out                                                        
1   2
2   3
3   1
4   0
...