c++ - 对没有比较器或 lambda 函数的 vector 进行排序?

标签 c++ sorting vector lambda comparator

今天我遇到了一些我认为不会编译的 C++ 代码:

#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<vector<int>> vectorOfVectors = { { 2, 3, 5 }, { 1, 2, 3 } };

    sort(vectorOfVectors.begin(), vectorOfVectors.end());

    return 0;
}

据我所知,C++ 中没有用于整数 vector 的默认比较器,因此必须实现自定义比较器或 lambda 函数才能将其传递给 sort() 函数。

然而,这段代码编译的事实让我想问这个问题;整数 vector 是否有默认比较器?是否有一个用于浮点数、 double 等?还是编译器会自动生成?需要注意的是,这种对 vector vector 进行排序的方法在网上找不到。

提前致谢!

最佳答案

来自 std::sort 上的 cppreference , 对于过载 void sort( RandomIt first, RandomIt last ); :

1) Elements are compared using operator<.


std::vector<T>提供 operator< .它的行为是:

Compares the contents of lhs and rhs lexicographically. The comparison is performed by a function equivalent to std::lexicographical_compare.



std::lexicographical_compare 的过载行为不需要比较器的是:

1) Elements are compared using operator<.



所以只要输入 Tstd::vector<T>operator< 相当然后 std::vector<T>可以与 operator< 进行比较因此与 std::sort 兼容.由于intoperator< 相当,std::vector<int> 也是如此因此 std::vector<std::vector<int>> 也是如此.这些类型中的每一种都适用于 std::sort没有明确的比较器。

关于c++ - 对没有比较器或 lambda 函数的 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59668278/

相关文章:

c++ - 如何使用静态库(.a 文件)而不是一组目标文件(.o)来创建共享库

java - 通过自定义Timsort能否有效提升这些场景下的性能?

javascript - 基于自定义数组顺序的 tinysort 排序 div

C 中的计数排序 - 错误 : Use of undeclared identifier

c++ - 关于结构 vector 数组的问题

c++ - Vector - 按引用调用 c++

c++ - 当外部变量在其他文件中声明不同时,如何使 g++ 生成警告?

c++ - 在 Linux 中构建时出现 Mysqlcppconn8 和 cmake 错误

c++ - C++ 中的括号重载运算符是否应该声明为 const 函数?

r - 根据指标添加反向指数