我有一个包含int
s 向量的向量对象
std::vector<std::vector<int>> vec;
Run Code Online (Sandbox Code Playgroud)
我一直在试图弄清楚它是如何std::sort(vec.begin(), vec.end())
工作的。这是我的观察结果:
我现在已经生成了一些2D向量,看来这两个总是正确的。但是,我对第二个假设感到怀疑。难道std::sort
真的以这种方式工作,或者它只是一些运气,使我的假设是否正确?
向量元素的排序与其他类型的排序相同。std::sort
使用给定的比较对象作为参数。如果未明确传递任何参数,std::less
则为默认值。
std::less
使用operator<
。根据矢量文档,它:
从字典上比较lhs和rhs的内容。比较由等效于的函数执行
std::lexicographical_compare
。
词典比较是具有以下属性的操作:
- 两个范围逐元素比较。
- 在字典上,第一个失配元素定义哪个范围小于另一个范围。
- 如果一个范围是另一个范围的前缀,则在字典上小于该范围的范围比另一个范围小。
- 如果两个范围具有相等的元素并且长度相同,则范围在字典上是相等的。
- 在字典上,空范围小于任何非空范围。
- 在字典上,两个空范围是相等的。
简而言之,词典顺序排序与字典排序相同(忽略某些语言的奇数)。
2D向量按大小排序。
不完全的。{1}, {3, 4}, {1, 2, 5}
将排序为{1}, {1, 2, 5}, {3, 4}
。