[C ++] [std :: sort]它如何在2D容器上工作?

0 c++ sorting stdvector

我有一个包含ints 向量的向量对象

std::vector<std::vector<int>> vec;
Run Code Online (Sandbox Code Playgroud)

我一直在试图弄清楚它是如何std::sort(vec.begin(), vec.end())工作的。这是我的观察结果:

  1. 2D向量按大小排序。
  2. 如果某些内部向量具有相同的大小,则第一个元素的值较小的向量将具有较小的索引值。

我现在已经生成了一些2D向量,看来这两个总是正确的。但是,我对第二个假设感到怀疑。难道std::sort真的以这种方式工作,或者它只是一些运气,使我的假设是否正确?

eer*_*ika 6

向量元素的排序与其他类型的排序相同。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}