Pup*_*ker 1 c++ sorting lambda vector 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;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,C++ 中没有用于整数向量的默认比较器,因此必须实现自定义比较器或 lambda 函数才能将其传递给 sort() 函数。
然而,这段代码编译的事实让我想问这个问题;是否有整数向量的默认比较器?有没有花车、双打等的?还是编译器会自动生成?需要注意的是,这种对向量的向量进行排序的方式在网上是找不到的。
提前致谢!
Fra*_*eux 10
从 cppreference 开始std::sort,对于重载void sort( RandomIt first, RandomIt last );:
1) 使用 比较元素
operator<。
std::vector<T>提供operator<. 它的行为是:
比较的内容
lhs和rhs字典序。比较由等效于 std::lexicographical_compare 的函数执行。
std::lexicographical_compare不带比较器的重载行为是:
1) 使用 比较元素
operator<。
所以只要Tin的类型std::vector<T>与operator<then相比较,就std::vector<T>可以与 相比较,operator<从而兼容std::sort。既然int是可比的operator<,所以是std::vector<int>,所以是std::vector<std::vector<int>>。这些类型中的每一种都可以在std::sort没有显式比较器的情况下使用。
据我所知,C++ 中没有向量的默认比较器......
vectors定义了比较运算符:
https://en.cppreference.com/w/cpp/container/vector/operator_cmp
std::vector已定义运算符== != < <= > >=。
由于它是一个模板类,因此您不需要为operator<avector可以容纳的每个可能的类型进行定义。如果类型满足LessThanComparable要求,则会生成它。
正如int显然可以相比<,vector<int>将有operator<它产生的。
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |