如何检查先前是否找到了最大值位置C ++

时间:2016-06-06 17:21:48

标签: c++ arrays

作为更大函数的一部分,我在迭代二维数组以找到每行中最大值的位置。

pos = std::distance(A_T[k].begin(), std::max_element(A_T[k].begin(), A_T[k].end(), 
            [](T a, T b) {return (abs(a) < abs(b)); }));

由于我的数组是2D,因此可以两次接收相同的位置 - 在这种情况下,我想返回下一个最大值的位置。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我使用Steve Lorrimer提出的解决方案解决了这个问题。

我开始初始化最大位置历史的向量。然后我循环了位置历史向量,将A_T的相应列设置为0.0。然后,我可以重复搜索下一个最大值,满足我的要求,即无法选择相同的列两次。

这是我的代码:

std::vector<unsigned> posHist;
for (unsigned k = 0; k < A.size(); k++)
{
    for (unsigned q = 0; q < posHist.size(); q++)
        for (unsigned i = 0; i < A_T.size(); i++)
            A_T[i][posHist[q]] = 0.0;

    posHist.push_back (std::distance(A_T[k].begin(),
        std::max_element(A_T[k].begin(), A_T[k].end(),
           [](T a, T b) {return (abs(a) < abs(b)));}));
}