今天我遇到了一些我认为不会编译的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 ++中没有用于整数矢量的默认比较器,因此为了将其传递给sort()函数,必须实现自定义比较器或lambda函数。
但是,这段代码已编译的事实使我想问这个问题;整数向量有默认的比较器吗?有浮子,双打等等吗?还是编译器自动生成它?应当指出,这种对向量的向量进行排序的方法在网上找不到。
提前感谢!
从std::sort
上的cppreference开始,对于重载std::sort
:
1)使用
void sort( RandomIt first, RandomIt last );
比较元素。
operator<
提供std::vector<T>
。它的行为是:
从字典上比较
operator<
和operator<
的内容。比较是通过等效于std :: lexicographical_compare的函数执行的。
lhs
的不带比较器的过载行为是:
1)使用
rhs
比较元素。
只要std::lexicographical_compare
中的std::lexicographical_compare
类型与operator<
具有可比性,那么T
就可以与std::vector<T>
比较,因此与operator<
兼容。由于std::vector<T>
可与operator<
相提并论,因此std::sort
也是如此,因此int
也是如此。这些类型中的每一种都可以在没有显式比较器的情况下与operator<
一起使用。
据我所知,C ++中没有用于矢量的默认比较器...
std::vector<int>
定义了比较运算符:
std::vector<std::vector<int>>
[std::sort
定义了运算符vector
。
因为它是模板类,所以不需要为https://en.cppreference.com/w/cpp/container/vector/operator_cmp可以容纳的每种可能的类型定义std::vector
。如果类型符合== != < <= > >=
要求,则将生成它。
由于operator<
显然可以与vector
进行比较,因此LessThanComparable将为其生成int
。