今天我遇到了一些我认为不会编译的 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
andrhs
lexicographically. The comparison is performed by a function equivalent to std::lexicographical_compare.
std::lexicographical_compare
的过载行为不需要比较器的是:1) Elements are compared using
operator<
.
所以只要输入
T
在 std::vector<T>
与 operator<
相当然后 std::vector<T>
可以与 operator<
进行比较因此与 std::sort
兼容.由于int
与 operator<
相当,std::vector<int>
也是如此因此 std::vector<std::vector<int>>
也是如此.这些类型中的每一种都适用于 std::sort
没有明确的比较器。
关于c++ - 对没有比较器或 lambda 函数的 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59668278/