[许多C ++标准算法,例如std::sort()
,都假定the comparator comp
是comp
,而不能假定strict weak ordering具有任何其他(好的)属性。但是很多时候comp
的确具有比严格的弱排序更多的特性。特别地,很多时候comp
是comp
(因此,尤其对于所有strict total order和a
,以下精确之一始终成立:b
,comp(a, b)
或comp(b, a)
)。例如,浮点数,整数和a = b
上通常的operator<()
都是严格的总订单。
通过将自身限制为only并假设std::string
是严格的弱排序,C ++标准库是否将自身限制为使用少于最佳算法?换句话说,如果C ++标准算法假设比较器是严格的总排序,而不仅仅是严格的弱排序,那么某些标准算法会比当前实现的速度更快吗?
更新:为更确切地理解“严格的总排序”的含义,让我们假设STL假定comp
(对类型为comp
的对象进行操作)具有T
的所有良好的排序理论性质。在operator<()
s上。 (因此,如果您愿意,我们还可以假设在类型为int
的对象上定义了一个operator==()
,该对象可以按您的期望工作;该假设是可选的,并且您可以根据需要进行不同的假设。 )是否可以使STL算法更快?
更笼统地说,如果STL对T
做出“更精细的”假设(即,假设比comp
更多的仅仅是严格的弱排序),那么可以使任何STL算法更快吗?
例如,对于浮点数,整数和
comp
都是严格的总订单。