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
相关产品推荐
相关产品推荐

