gpt4 book ai didi

c++ - 对定义为 vector 的矩阵进行排序

转载 作者:可可西里 更新时间:2023-11-01 17:55:38 26 4
gpt4 key购买 nike

假设我有一个方阵 A尺寸n , 定义为 std::vector<double> .

std::vector<double> A(n*n);

矩阵的元素以通常的方式访问:

double a_ij = A[i*n + j];

我需要根据第一列对矩阵的行进行升序排序。

qsort 函数允许我使用数组和函数指针来完成它,但我想找到一种方法来使用 vector 和 std::sort 来完成它.

另请注意,出于性能原因,我不想将矩阵定义为 vector 的 vector 。

编辑:

我传给qsort的函数:

static int comparisonFunction(const void* firstRow, const void* secondRow) 
{
if (((double *)firstRow)[0] < ((double *)secondRow)[0]) return -1;
else if (((double *)secondRow)[0] < ((double *)firstRow)[0]) return 1;
return 0;
}

调用:

std::qsort(matrixArray, nbRows, sizeof(double)*nbRows, comparisonFunction);

最佳答案

std::sort适用于迭代器,并不关心迭代器的实现。因此,如果您定义一个 struct RowIter它包装了一个 std::vector<double>& matrix , 与成员 size_t RowSize对于 operator+(size_t) (和 operator-operator++ 等)和 Row operator*() const , 然后 std::sort可以按该迭代器排序。

仍然比 qsort 多了很多工作,不幸的是,它会推广到非 POD 类型。

关于c++ - 对定义为 vector<double> 的矩阵进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397977/

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