<Vector>排序

该博客转载了关于C++ vector排序的内容,聚焦于C++中vector排序这一信息技术相关要点。
int main(){
    int s[] = {1,6,3,2,5};
    vector<int> vec(s, s+5);
    cout<<*vec.begin()<<endl;   //指向第一个元素
    cout<<*vec.end()<<endl;     //指向最后一个元素的后一个位置
    cout<<*vec.rbegin()<<endl;  //reverse begin  指向最后一个元素
    cout<<*vec.rend()<<endl;    //指向第一个元素的前一个元素
}
sort(vec.begin(), vec.end());//正向排序 即按照从小到大的顺序排序
sort(vec.rbegin(), vec.rend());//逆向排序 即按照从大到小的顺序进行排序

转载于C++ vector排序_c++ vector 排序-优快云博客

### 关于 C++ `vector<vector>` 的排序方法 在 C++ 中,`std::sort` 函数可以用于对一维向量 (`vector`) 进行排序。对于二维向量(即 `vector<vector<int>>`),可以通过自定义比较函数来实现特定的排序逻辑。以下是几种常见的排序方式及其对应的代码示例。 #### 方法 1:按子向量的第一个元素升序排列 如果希望按照每个子向量中的第一个元素进行升序排序,则可以在 `std::sort` 中提供一个 lambda 表达式作为比较器: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<std::vector<int>> vec = {{3, 4}, {1, 2}, {5, 6}}; // 按照子向量的第一个元素升序排序 std::sort(vec.begin(), vec.end(), [](const std::vector<int>& a, const std::vector<int>& b) -> bool { return a.front() < b.front(); }); for (const auto& subVec : vec) { for (const auto& elem : subVec) { std::cout << elem << " "; } std::cout << std::endl; } return 0; } ``` 此代码片段通过调用 `front()` 获取每个子向量的第一个元素并对其进行比较[^1]。 --- #### 方法 2:按子向量的小降序排列 另一种常见需求是对子向量按其长度进行排序。下面是一个例子,展示如何按子向量的小降序排列: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<std::vector<int>> vec = {{1, 2, 3}, {4, 5}, {6}}; // 按照子向量的小降序排序 std::sort(vec.begin(), vec.end(), [](const std::vector<int>& a, const std::vector<int>& b) -> bool { return a.size() > b.size(); }); for (const auto& subVec : vec) { for (const auto& elem : subVec) { std::cout << elem << " "; } std::cout << std::endl; } return 0; } ``` 这里使用了 `size()` 来获取每个子向量的长度,并将其作为比较依据[^2]。 --- #### 方法 3:按子向量总和升序排列 还可以根据子向量中所有元素之和来进行排序。以下是如何计算子向量总和并对它们进行升序排序的例子: ```cpp #include <iostream> #include <vector> #include <algorithm> #include <numeric> // accumulate() int main() { std::vector<std::vector<int>> vec = {{3, 7}, {1, 9}, {8, 2}}; // 按照子向量的总和升序排序 std::sort(vec.begin(), vec.end(), [](const std::vector<int>& a, const std::vector<int>& b) -> bool { int sumA = std::accumulate(a.begin(), a.end(), 0); int sumB = std::accumulate(b.begin(), b.end(), 0); return sumA < sumB; }); for (const auto& subVec : vec) { for (const auto& elem : subVec) { std::cout << elem << " "; } std::cout << std::endl; } return 0; } ``` 在此示例中,`std::accumulate` 被用来求取子向量的所有元素之和[^3]。 --- #### 方法 4:按字典顺序排序 当需要将整个二维向量视为多个字符串序列时,可以直接利用默认的 `<` 或 `>` 操作符完成排序操作: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<std::vector<int>> vec = {{3, 4}, {1, 2}, {5, 6}}; // 默认情况下会按照字典顺序排序 std::sort(vec.begin(), vec.end()); for (const auto& subVec : vec) { for (const auto& elem : subVec) { std::cout << elem << " "; } std::cout << std::endl; } return 0; } ``` 这种形式下,默认行为已经实现了基于逐位比较的字典顺序排序[^4]。 --- ### 总结 以上展示了四种不同的针对 `vector<vector<T>>` 类型数据结构的有效排序策略。每种方法都依赖于标准库提供的工具以及灵活运用 Lambda 表达式的技巧来自定义所需的排序规则。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-breezeyy-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值