C++ 如何检查之前是否已找到最大值位置C++;

C++ 如何检查之前是否已找到最大值位置C++;,c++,arrays,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)); })); pos=std::distance(A_T[k].begin(),std::max_元素(A_T[k].begin(),A_T[k].

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

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)); }));
pos=std::distance(A_T[k].begin(),std::max_元素(A_T[k].begin(),A_T[k].end(),
[](ta,tb){return(abs(a)
因为我的数组是2D的,所以可以两次接收相同的位置-在本例中,我想返回下一个最大值的位置


有没有一个简单的方法可以做到这一点?

我使用由提出的解决方案解决了这个问题

我首先初始化一个最大位置历史向量。然后我在位置历史向量上循环,将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)));}));
}
std::vector posHist;
for(无符号k=0;k
我使用由提出的解决方案解决了这个问题

我首先初始化一个最大位置历史向量。然后我在位置历史向量上循环,将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)));}));
}
std::vector posHist;
for(无符号k=0;k
你的意思是可以两次获得同一列?是的,我希望永远不会两次找到同一列
n\u元素
将允许你访问第二、第三等最大的列-但是这是一种排序算法,因此如果你不能改变源数据,那么你需要复制它。我认为一个可能的解决方案是保持以前看到的结果的
/
无序集
,并用每行的结果进行更新。然后,每次集合中已经存在上一个结果时,必须使用递增计数器反复检查
n\u元素
。首先准备一个布尔值容器,所有
false
。与行(列数)大小相同,每次找到最大整数时,将该索引标记为
true
。设计并测试它,如果该索引已经是
true
,则忽略并再次搜索。可能会对副本进行排序并获取下一个索引,等等可能会复制源数据,然后针对每一行,找到
max\u element
,并从源数据中删除该列。这将满足每个列只能返回一次的约束,即您的意思是可以两次获得同一列?是的,我希望永远不会两次找到同一列
n\u元素
将允许您访问第二、第三等最大的元素-但这是一种排序算法,因此,如果无法对源数据进行变异,则需要复制它。我认为一个可能的解决方案是保持以前看到的结果的
/
无序集
,并用每行的结果进行更新。然后,每次集合中已经存在上一个结果时,必须使用递增计数器反复检查
n\u元素
。首先准备一个布尔值容器,所有
false
。与行(列数)大小相同,每次找到最大整数时,将该索引标记为
true
。设计并测试它,如果该索引已经是
true
,则忽略并再次搜索。可能会对副本进行排序并获取下一个索引,等等可能会复制源数据,然后针对每一行,找到
max\u element
,并从源数据中删除该列。这将满足每个列只能返回一次的约束