You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中能否用std::sort直接排序vector的vector?是否需自定义比较器?

关于std::sort对vector的vector排序的问题

不需要传入自定义比较函数,直接调用std::sort(vec.begin(), vec.end())就能实现按每个子vector的第一个元素升序排序。

原因是C++标准库中std::vector的默认比较运算符(operator<)采用字典序比较:先比较两个vector的第一个元素,若相等则比较第二个元素,以此类推。对于你给出的{{7, 2}, {1, 8}, {3, 4}}这种结构,默认排序会优先按子vector的第一个元素从小到大排列,完全符合需求。

举个实际代码例子验证:

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

int main() {
    std::vector<std::vector<int>> vec = {{7, 2}, {1, 8}, {3, 4}};
    std::sort(vec.begin(), vec.end());
    
    for (const auto& sub : vec) {
        std::cout << "[" << sub[0] << ", " << sub[1] << "] ";
    }
    // 输出结果:[1, 8] [3, 4] [7, 2]
    return 0;
}

只有当你需要非字典序的排序规则时(比如按子vector的第二个元素排序、按第一个元素降序排列等),才需要为std::sort传入自定义比较函数。比如如果要按第一个元素降序,可以这么写:

std::sort(vec.begin(), vec.end(), [](const std::vector<int>& a, const std::vector<int>& b) {
    return a[0] > b[0];
});

内容的提问来源于stack exchange,提问作者Shefali Kanaujia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:52:03