3

假设我们有 int 的二维向量,如:

1   4   3   0
1   5   6   3
2   0   0   1
6   5   9*  3
3   5   4   2

现在如何在上面的示例中找到 2D 向量中最大值的位置:[2][3]==9。答案是 2,3

我知道我可以使用 std::max_element() 但它提供了迭代器。

另一点是我不想先找到最大值,然后使用 std::find() 方法找到它的位置。(因为它效率不高)

实际上,我如何定义自定义比较函数以通过单次迭代来完成此任务。

非常感谢。

4

3 回答 3

3
int Array[4][4] = { {2, 3, 4, 6}, {1, 98, 8, 22}, {12, 65, 1, 3}, {1, 7, 2, 12}};

struct location
    {
       int x;
       int y;
    };

int main()
{
    int temp = 0;
    location l;

    for(int i = 0; i < 4; i++)
        for(int j = 0; j< 4; j++)
            if(temp < Array[i][j])
            {
                temp = Array[i][j];
                l.x = i+ 1;
                l.y = j+ 1;
            }

            cout<<"Maximum Value is "<<temp<<" And is found at ("<<l.x<<","<<l.y<<")";
system("pause");
}
于 2012-10-12T20:01:43.353 回答
2

假设它是N*N向量(在这种情况下为 4*4),并且这个向量的名称是sum

7 4 2 0 
4 8 10 8 
3 6 7 6 
3 9 19* 14

定义一个一维向量,如下图

vector<int> oneDimVector;
for(int i = 0; i < 4; i++){
    for(int j = 0; j < 4; j++){
        oneDimVector.push_back(sum[i][j]);
    }
}

然后找出该一维向量中的最大元素,如下所示

vector<int>::iterator maxElement;
maxElement = max_element(oneDimVector.begin(), oneDimVector.end());

然后找出矩阵中的确切位置如下图

int dist = distance(oneDimVector.begin(), maxElement);
int col = dist % 4;
int row = dist / 4;

现在你得到了你所期望的位置

cout << "Max element is " << *maxElement << " at" << " " << row << "," << col << endl;

注意 - 我们假设 (0,0) 作为初始位置

于 2016-06-06T06:31:37.490 回答
0

它给出了元素的位置及其值

在)

时间很少的 for 循环。

找到下面的代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<vector<int>> a = { {2, 3, 4, 6}, {1, 98, 8, 22}, {12, 65, 1, 3}, {1, 7, 2, 12}};
    vector<int> tmp;

    //create 1-dimensional array to find the max element
    for(int i=0;i<a.size();i++){
        tmp.insert(tmp.end(),a[i].begin(),a[i].end());
    }

    //get the row and column location of the elment
    int row = (max_element(tmp.begin(),tmp.end()) -tmp.begin())/a.size();
    int col = (max_element(tmp.begin(),tmp.end()) -tmp.begin())%a.size();

    // gets the value of the max element in O(n) time
    int val = *max_element(tmp.begin(),tmp.end());

    cout<<"Max element is located at:"<<(row+1)<<","<<(col+1)<<"and the value is "<<val<<endl;

    return 0;
}
于 2018-05-08T09:55:43.287 回答