sort one array and other array following?

后端 未结 3 722
北海茫月
北海茫月 2021-01-28 23:28

here is the C++ sample

int a[1000] = {3,1,5,4}
int b[1000] = {7,9,11,3}

how do i make it so if i sort array a, array b also following array a

3条回答
  •  执念已碎
    2021-01-28 23:57

    The simplest way is to rearrange your data into an array-of-structs instead of a pair of arrays so that each datum is contiguous; then, you can use an appropriate comparator. For example:

    struct CompareFirst
    {
        bool operator() (const std::pair& lhs, const std::pair& rhs)
        {
            return lhs.first < rhs.first;
        }
    };
    
    // c[i].first contains a[i], c[i].second contains b[i] for all i
    std::pair c[1000];
    std::sort(c, c+1000, CompareFirst());
    

    If you can't refactor your data like that, then you need to define a custom class that acts as a RandomAccessIterator:

    struct ParallalArraySortHelper
    {
        ParallelArraySortHelper(int *first, int *second)
            : a(first), b(second)
        {
        }
    
        int& operator[] (int index) { return a[index]; }
        int operator[] const (int index) { return a[index]; }
    
        ParallelArraySortHelper operator += (int distance)
        {
            a += distance;
            b += distance;
            return *this;
        }
        // etc.
        // Rest of the RandomAccessIterator requirements left as an exercise
    
        int *a;
        int *b;
    };
    ...
    int a[1000] = {...};
    int b[1000] = {...};
    std::sort(ParallalArraySortHelper(a, b), ParallelArraySortHelper(a+1000, b+1000));
    

提交回复
热议问题