二维vector排序函数c++
时间: 2025-04-30 14:17:16 浏览: 33
### 如何在C++中对二维`vector`进行排序
对于C++中的二维`vector`,可以利用标准模板库(STL)提供的`std::sort()`函数来完成排序工作。为了使`std::sort()`能处理多维数据结构,通常需要提供自定义的比较器。
#### 自定义比较器
当使用`std::sort()`对二维向量进行排序时,可以通过传递第三个参数作为比较函数或lambda表达式给`std::sort()`,从而指定特定的排序规则[^2]。
下面是一个简单的例子,展示如何基于不同条件对二维`vector<int>`按行排序:
```cpp
#include <iostream>
#include <algorithm> // std::sort()
#include <vector>
bool cmpRowSum(const std::vector<int>& a, const std::vector<int>& b){
int sumA = 0;
for(auto& elem : a) sumA += elem;
int sumB = 0;
for(auto& elem : b) sumB += elem;
return sumA < sumB;
}
int main(){
std::vector<std::vector<int>> matrix{
{3, 7},
{9, 8},
{1, 5}
};
// 按照行元素之和从小到大排序
std::sort(matrix.begin(), matrix.end(), cmpRowSum);
// 输出结果
for (auto &row : matrix){
for(int val : row){
std::cout << val << ' ';
}
std::cout << '\n';
}
return 0;
}
```
此程序首先计算每一行所有元素的总和,并依据这些总和来进行升序排列。当然也可以根据其他逻辑修改比较器以适应不同的需求,比如按照某列的具体数值、最大最小值等特性进行排序[^4]。
如果希望简化代码并提高可读性,则可以采用lambda表达式的写法代替显式声明的比较函数:
```cpp
// 使用Lambda表达式替代cmpRowSum函数
std::sort(matrix.begin(), matrix.end(),
[](const auto& lhs, const auto& rhs){return std::accumulate(lhs.begin(),lhs.end(),0)<std::accumulate(rhs.begin(),rhs.end(),0);});
```
上述方式不仅限于整数类型的二维向量,还可以应用于包含更复杂的数据类型如结构体的情况。例如,如果有由多个属性组成的记录列表,同样可以根据任意字段组合构建相应的比较策略。
阅读全文
相关推荐


















