gpt4 book ai didi

c++ - 根据另一个数组对一个数组进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:19 27 4
gpt4 key购买 nike

<分区>

我使用 C++(使用 C++11 标准)进行编码,我有两个大的内置类型数组,我想根据第一个对第二个进行排序。这是一个例子:

A = {1, 5, 4, 3, 6, 2};
B = {1, 2, 3, 4, 5, 6};

排序后:

A = {1, 2, 3, 4, 5, 6};
B = {1, 6, 4, 3, 2, 5};

就好像每个元素B[i]附加到元素 A[i]你只需对数组 A 进行排序.所以 B 中的元素根据A中的对应元素移动.我知道这个问题已经被问了一遍又一遍,但我遇到的唯一解决方案是使用 pair<type 1, type 2> .但是考虑到数组很大,pairs数组的内存分配和数组的来回复制需要相当长的时间。但我相信排序可以就地完成,即仅使用 O(1)内存。事实上,如果 std::sort 允许进行服装交换,那就没问题了。因为我认为这是排序算法使用的唯一超越比较器的东西。

A = vector<double>(1e6);  // some random numbers
B = vector<double>(1e6); // some random numbers
Comp comp(&A,&B);
Swap swap(&A,&B);
costume_sort(A,B,comp,swap); // some sort function that can take costume swap and compare

class Comp {
vector<double> *A;
vector<double> *B;
Comp(vector<double> *A, vector<double> *B) : A(A),B(B) {};

bool compareTo(size_t i, size_t j) { return A->at(i) < A->at(j); };
};


class Swap {
vector<double> *A;
vector<double> *B;
Swap(vector<double> *A, vector<double> *B) : A(A),B(B) {};

void swapFnc(size_t i, size_t j) { swap(A->at(i), A->at(j));swap(B->at(i), B->at(j)); };
};

STL 或其他库中是否有任何函数可以做到这一点?这是我试图在这里解释的想法的一种伪代码。显然它并不准确,但我希望我的意思很清楚。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com