如果比较器需要严格的总排序,而不仅仅是严格的弱排序,C ++标准算法会更快吗?

问题描述 投票:1回答:1

[许多C ++标准算法,例如std::sort(),都假定the comparator compcomp,而不能假定strict weak ordering具有任何其他(好的)属性。但是很多时候comp的确具有比严格的弱排序更多的特性。特别地,很多时候compcomp(因此,尤其对于所有strict total ordera,以下精确之一始终成立:bcomp(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算法更快吗?

c++ algorithm std comparator
1个回答
0
投票

例如,对于浮点数,整数和comp都是严格的总订单。

© www.soinside.com 2019 - 2024. All rights reserved.