Article last modified on 2002-5-29
----------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual C++, 32-bit Editions, version 6.0, SP5
----------------------------------------------------------------
下面的代码总是运行时挂起。 谁知道为什么?但是如果我将not2去掉或者将VECTOR_SIZE减至16,就能正常工作了。代码如下:
|
有一位名为"Marco Dalla Gasperina"的朋友这么评论道: “这应该是你的程序的一个Bug。 原因是,sort()希望是一个Strict Weak Ordering。但在你的代码中,not2(greater())的意思就是“not greater”,相当于“less than or equal to”。这不是一个Strict Weak Ordering。当两个元素相等时,这个表达式就会发生一些未知行为。 有两个方案: 方案1:改为sort(vecStrings.begin(), vecStrings.end(), not2(greater_equal<int>()));即可! 方案2:直接写sort(vecStrings.begin(), vecStrings.end())即可,因为less<int>()是默认的sort行为。” 但是我总觉得不对。 我的思路是这样的: 首先我可以证明not2(greater())是没有问题的。在MSDN(2002 January)中的less_equal Function(ms-help://MS.MSDNQTR.2002JAN.1033/vcstdlib/html/vclrf_functional_Lessequal.htm)中讲道: The binary predicate less_equal<Type> provides a strict weak ordering of a set of element values of type Type into equivalence classes if and only if this Type satisfies the standard mathematical requirements for being so ordered. 而且它下面给的例子就是这么直接用的: sort( v1.begin( ), v1.end( ), less_equal<int>( ) ); |