gpt4 book ai didi

c++ - 对与矩阵的行和列相对应的对 vector 进行排序

转载 作者:行者123 更新时间:2023-12-02 10:00:44 25 4
gpt4 key购买 nike

我有一个int的矩阵。 <row,col>对存储在std::vector中。我想对这个vector进行排序,以便在排序后遍历时按顺序给出矩阵的元素。遵循示例代码:

#include <vector>
#include <algorithm>

int main()
{
int matrix[2][2];
matrix[0][0] = 4;
matrix[0][1] = 3;
matrix[1][0] = 7;
matrix[1][1] = 6;
std::vector<std::pair<int, int>> pair_indices;
pair_indices.push_back(std::make_pair(0, 0));//Row 0, column 0, corresponds to entry 4
pair_indices.push_back(std::make_pair(0, 1));//Row 0, column 1, corresponds to entry 3
pair_indices.push_back(std::make_pair(1, 0));//Row 1, column 0, corresponds to entry 7
pair_indices.push_back(std::make_pair(1, 1));//Row 1, column 1, corresponds to entry 6
std::sort(pair_indices.begin(), pair_indices.end(), [&](int index_left, int index_right) {
int i1, j1, i2, j2;
i1 = pair_indices[index_left].first;
j1 = pair_indices[index_left].second;
i2 = pair_indices[index_right].first;
j2 = pair_indices[index_right].second;
return matrix[i1][j1] > matrix[i2][j2];//Descending order
}
);
//At this point, I would like pair_indices to be: [ <1,0> | <1,1> | <0,0> | <0,1> ]
getchar();
return(0);
}
上面的代码没有在 \include\xutility\include\algorithm中的错误编译。上面的源代码中的错误是:
see reference to function template instantiation 'void std::sort<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,main::<lambda_95ed4bac887c9dd3f80c928a0bd63c0f>>(const _RanIt,const _RanIt,_Pr)' being compiled

with
[
_Ty=std::pair<int,int>,
_RanIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::pair<int,int>>>>,
_Pr=main::<lambda_95ed4bac887c9dd3f80c928a0bd63c0f>
]
任何帮助表示赞赏。

最佳答案

比较器应该包含两个元素。您正在通过一个采用int的比较器,但 vector 的元素为std::pair<int,int>

#include <vector>
#include <algorithm>
#include <utility>
#include <iostream>

int main()
{
int matrix[2][2];
matrix[0][0] = 4;
matrix[0][1] = 3;
matrix[1][0] = 7;
matrix[1][1] = 6;

using index2d = std::pair<int,int>;

std::vector<std::pair<int, int>> pair_indices;
pair_indices.push_back(std::make_pair(0, 0));//Row 0, column 0, corresponds to entry 4
pair_indices.push_back(std::make_pair(0, 1));//Row 0, column 1, corresponds to entry 3
pair_indices.push_back(std::make_pair(1, 0));//Row 1, column 0, corresponds to entry 7
pair_indices.push_back(std::make_pair(1, 1));//Row 1, column 1, corresponds to entry 6
std::sort(pair_indices.begin(),
pair_indices.end(),
[&matrix](const index2d& a,const index2d& b) {
return matrix[a.first][a.second] > matrix[b.first][b.second];//Descending order
}
);
for (const auto& p : pair_indices) {
std::cout << matrix[p.first][p.second] << '\n';
}
// getchar();
return(0);
}
输出:
7
6
4
3
您不需要 #include <utility>std::pair。没有它,代码可能会编译,但是您最好包含使用的代码。我也将 size_t用作索引,而不是 int

关于c++ - 对与矩阵的行和列相对应的对 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62679495/

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