C++ 对向量向量中的多列进行排序
C++ Sorting multiple columns in a vector of vectors
我正在尝试使用嵌套向量对多列进行排序,但我不确定如何实际执行此操作。我在这里搜索了一堆帖子,但它们只显示了如何对两列进行排序,我知道对一列进行排序如下:
sort(myVector.begin(), myVector.end(), [](vector<int> const a, vector<int> const b){return a[0] < b[0];});
我有一个输入,用户在其中输入向量的大小并相应地生成,我希望能够对输出上的每一列进行排序。
例如:
排序
{3, 7, 2}
{9, 6, 8}
{5, 1, 4}
排序
{3, 1, 2}
{5, 6, 4}
{9, 7, 8}
这是线性代数库中的经典之作:由于元素访问的模式,给定矩阵的布局会对性能产生很大影响。
你面对的是完全相同的结果。显然,在您的情况下,int 的每个向量都是一行。您需要对列进行排序。您可以做的是转置技巧:
- 计算矩阵的转置
- 对该转置的行进行排序
- 计算回此排序矩阵的转置
- 利润
一些代码来说明这个想法:
std::vector<std::vector<int>> transpose(std::vector<std::vector<int>> const& input) {
// For simplicity, I assume input is well formed, i.e.:
// - All int vectors have the same size
// - input is non-empty.
std::vector<std::vector<int>> tr_input;
for(std::size_t i = 0; i < input.front().size(); ++i) {
std::vector<int> tmp;
for (auto& vec : input) {
tmp.push_back(vec.at(i));
}
tr_input.push_back(tmp);
}
return tr_input;
}
现在我们有了转置函数,我们可以实现算法。
std::vector<std::vector<int>> input = { { 3, 7, 2 },
{ 9, 6, 8 },
{ 5, 1, 4 } };
auto tr = transpose(input);
for (auto& v : tr) {
std::sort(v.begin(), v.end());
}
auto sorted = transpose(tr);
结果可以在此现场演示中查看
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序