对一个数组进行排序,然后对另一个数组进行排序? 这里是C++样本 int a[1000] = {3,1,5,4} int b[1000] = {7,9,11,3}

对一个数组进行排序,然后对另一个数组进行排序? 这里是C++样本 int a[1000] = {3,1,5,4} int b[1000] = {7,9,11,3},c++,arrays,sorting,C++,Arrays,Sorting,如果我对数组a排序,数组b也跟在数组a后面,我该怎么做呢 范例 a[1000] = {1,3,4,5} b[1000] = {9,7,3,11} 可以使用排序功能吗 sort(a,a+4) 还要对数组b进行排序吗 编辑:如果有3个数组怎么办?而不是使用两个数组,您能否使用一个对数组,然后使用特殊的比较函子而不是默认的小于运算符对其排序?最简单的方法是将数据重新排列为一个结构数组而不是一对数组,以便每个数据都是连续的;然后,您可以使用适当的比较器。例如: struct CompareFirst

如果我对数组a排序,数组b也跟在数组a后面,我该怎么做呢

范例

a[1000] = {1,3,4,5}
b[1000] = {9,7,3,11}
可以使用排序功能吗

sort(a,a+4)
还要对数组b进行排序吗


编辑:如果有3个数组怎么办?

而不是使用两个数组,您能否使用一个
对数组,然后使用特殊的比较函子而不是默认的小于运算符对其排序?

最简单的方法是将数据重新排列为一个结构数组而不是一对数组,以便每个数据都是连续的;然后,您可以使用适当的比较器。例如:

struct CompareFirst
{
    bool operator() (const std::pair<int,int>& lhs, const std::pair<int,int>& rhs)
    {
        return lhs.first < rhs.first;
    }
};

// c[i].first contains a[i], c[i].second contains b[i] for all i
std::pair<int, int> c[1000];
std::sort(c, c+1000, CompareFirst());

生成一个与原始数组大小相同的数组,包含数组中的索引:
{0,1,2,3}
。现在使用一个自定义的comparator functor来比较关联数组中的元素,而不是索引本身

template<typename T>
class CompareIndices
{
public:
    CompareIndices(const T * array) : m_AssociatedArray(array) {}
    bool operator() (int left, int right) const
    {
        return std::less(m_AssociatedArray[left], m_AssociatedArray[right]);
    }
private:
    const T * m_AssociatedArray;
};

std::sort(i, i+4, CompareIndices(a));
模板
类比较索引
{
公众:
比较索引(常量T*数组):m_AssociatedArray(数组){}
布尔运算符()(int left,int right)常量
{
返回std::less(m_AssociatedArray[左]、m_AssociatedArray[右];
}
私人:
常数T*m_关联数组;
};
排序(i,i+4,比较(a));

一旦有了索引的排序列表,就可以将其应用于原始数组
a
,或任何其他所需的
b
数组。

使用索引进行排序。请参阅@ben,因为b未排序。它的排列方式和过去一样。啊哈。然后,zuelb应该编写自己的排序函数。如果有3个数组,那么可以使用这种方法吗?在这种情况下,您需要一个3元组(或者为它编写一个结构),但基本上是肯定的。
template<typename T>
class CompareIndices
{
public:
    CompareIndices(const T * array) : m_AssociatedArray(array) {}
    bool operator() (int left, int right) const
    {
        return std::less(m_AssociatedArray[left], m_AssociatedArray[right]);
    }
private:
    const T * m_AssociatedArray;
};

std::sort(i, i+4, CompareIndices(a));