mirror of
				https://github.com/boostorg/utility.git
				synced 2025-11-04 02:11:45 +01:00 
			
		
		
		
	
		
			
	
	
		
			213 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								<HTML>
							 | 
						||
| 
								 | 
							
								<!--
							 | 
						||
| 
								 | 
							
								  -- Copyright (c) Jeremy Siek 2000
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Permission to use, copy, modify, distribute and sell this software
							 | 
						||
| 
								 | 
							
								  -- and its documentation for any purpose is hereby granted without fee,
							 | 
						||
| 
								 | 
							
								  -- provided that the above copyright notice appears in all copies and
							 | 
						||
| 
								 | 
							
								  -- that both that copyright notice and this permission notice appear
							 | 
						||
| 
								 | 
							
								  -- in supporting documentation.  Silicon Graphics makes no
							 | 
						||
| 
								 | 
							
								  -- representations about the suitability of this software for any
							 | 
						||
| 
								 | 
							
								  -- purpose.  It is provided "as is" without express or implied warranty.
							 | 
						||
| 
								 | 
							
								  -->
							 | 
						||
| 
								 | 
							
								<!--
							 | 
						||
| 
								 | 
							
								  -- Copyright (c) 1996-1999
							 | 
						||
| 
								 | 
							
								  -- Silicon Graphics Computer Systems, Inc.
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Permission to use, copy, modify, distribute and sell this software
							 | 
						||
| 
								 | 
							
								  -- and its documentation for any purpose is hereby granted without fee,
							 | 
						||
| 
								 | 
							
								  -- provided that the above copyright notice appears in all copies and
							 | 
						||
| 
								 | 
							
								  -- that both that copyright notice and this permission notice appear
							 | 
						||
| 
								 | 
							
								  -- in supporting documentation.  Silicon Graphics makes no
							 | 
						||
| 
								 | 
							
								  -- representations about the suitability of this software for any
							 | 
						||
| 
								 | 
							
								  -- purpose.  It is provided "as is" without express or implied warranty.
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Copyright (c) 1994
							 | 
						||
| 
								 | 
							
								  -- Hewlett-Packard Company
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -- Permission to use, copy, modify, distribute and sell this software
							 | 
						||
| 
								 | 
							
								  -- and its documentation for any purpose is hereby granted without fee,
							 | 
						||
| 
								 | 
							
								  -- provided that the above copyright notice appears in all copies and
							 | 
						||
| 
								 | 
							
								  -- that both that copyright notice and this permission notice appear
							 | 
						||
| 
								 | 
							
								  -- in supporting documentation.  Hewlett-Packard Company makes no
							 | 
						||
| 
								 | 
							
								  -- representations about the suitability of this software for any
							 | 
						||
| 
								 | 
							
								  -- purpose.  It is provided "as is" without express or implied warranty.
							 | 
						||
| 
								 | 
							
								  --
							 | 
						||
| 
								 | 
							
								  -->
							 | 
						||
| 
								 | 
							
								<Head>
							 | 
						||
| 
								 | 
							
								<Title>LessThanComparable</Title>
							 | 
						||
| 
								 | 
							
								</Head>
							 | 
						||
| 
								 | 
							
								<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" 
							 | 
						||
| 
								 | 
							
								        ALINK="#ff0000"> 
							 | 
						||
| 
								 | 
							
								<IMG SRC="../../c++boost.gif" 
							 | 
						||
| 
								 | 
							
								     ALT="C++ Boost" width="277" height="86"> 
							 | 
						||
| 
								 | 
							
								<!--end header-->
							 | 
						||
| 
								 | 
							
								<BR Clear>
							 | 
						||
| 
								 | 
							
								<H1>LessThanComparable</H1>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<h3>Description</h3>
							 | 
						||
| 
								 | 
							
								A type is LessThanComparable if it is ordered: it must
							 | 
						||
| 
								 | 
							
								be possible to compare two objects of that type using <tt>operator<</tt>, and
							 | 
						||
| 
								 | 
							
								<tt>operator<</tt> must be a strict weak ordering relation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<h3>Refinement of</h3>
							 | 
						||
| 
								 | 
							
								<h3>Associated types</h3>
							 | 
						||
| 
								 | 
							
								<h3>Notation</h3>
							 | 
						||
| 
								 | 
							
								<Table>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>X</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								A type that is a model of LessThanComparable
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</TR>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x</tt>, <tt>y</tt>, <tt>z</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Object of type <tt>X</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</tr>
							 | 
						||
| 
								 | 
							
								</table>
							 | 
						||
| 
								 | 
							
								<h3>Definitions</h3>
							 | 
						||
| 
								 | 
							
								Consider the relation <tt>!(x < y) && !(y < x)</tt>.  If this relation is
							 | 
						||
| 
								 | 
							
								transitive (that is, if <tt>!(x < y) && !(y < x) && !(y < z) && !(z < y)</tt>
							 | 
						||
| 
								 | 
							
								implies <tt>!(x < z) && !(z < x)</tt>), then it satisfies the mathematical
							 | 
						||
| 
								 | 
							
								definition of an equivalence relation.  In this case, <tt>operator<</tt>
							 | 
						||
| 
								 | 
							
								is a <i>strict weak ordering</i>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								If <tt>operator<</tt> is a strict weak ordering, and if each equivalence class
							 | 
						||
| 
								 | 
							
								has only a single element, then <tt>operator<</tt> is a <i>total ordering</i>.
							 | 
						||
| 
								 | 
							
								<h3>Valid expressions</h3>
							 | 
						||
| 
								 | 
							
								<Table border>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Name
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Expression
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Type requirements
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Return type
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								</TR>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Less
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x < y</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Convertible to <tt>bool</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</TR>
							 | 
						||
| 
								 | 
							
								</table>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<h3>Expression semantics</h3>
							 | 
						||
| 
								 | 
							
								<Table border>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Name
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Expression
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Precondition
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Semantics
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								<TH>
							 | 
						||
| 
								 | 
							
								Postcondition
							 | 
						||
| 
								 | 
							
								</TH>
							 | 
						||
| 
								 | 
							
								</TR>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Less
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x < y</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x</tt> and <tt>y</tt> are in the domain of <tt><</tt>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</table>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<h3>Complexity guarantees</h3>
							 | 
						||
| 
								 | 
							
								<h3>Invariants</h3>
							 | 
						||
| 
								 | 
							
								<Table border>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Irreflexivity
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x < x</tt> must be false.
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</TR>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Antisymmetry
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x < y</tt> implies !(y < x) <A href="#2">[2]</A>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</TR>
							 | 
						||
| 
								 | 
							
								<TR>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								Transitivity
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								<TD VAlign=top>
							 | 
						||
| 
								 | 
							
								<tt>x < y</tt> and <tt>y < z</tt> implies <tt>x < z</tt> <A href="#3">[3]</A>
							 | 
						||
| 
								 | 
							
								</TD>
							 | 
						||
| 
								 | 
							
								</tr>
							 | 
						||
| 
								 | 
							
								</table>
							 | 
						||
| 
								 | 
							
								<h3>Models</h3>
							 | 
						||
| 
								 | 
							
								<UL>
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								int
							 | 
						||
| 
								 | 
							
								</UL>
							 | 
						||
| 
								 | 
							
								<h3>Notes</h3>
							 | 
						||
| 
								 | 
							
								<P><A name="1">[1]</A>
							 | 
						||
| 
								 | 
							
								Only <tt>operator<</tt> is fundamental; the other inequality operators
							 | 
						||
| 
								 | 
							
								are essentially syntactic sugar.
							 | 
						||
| 
								 | 
							
								<P><A name="2">[2]</A>
							 | 
						||
| 
								 | 
							
								Antisymmetry is a theorem, not an axiom: it follows from
							 | 
						||
| 
								 | 
							
								irreflexivity and transitivity.
							 | 
						||
| 
								 | 
							
								<P><A name="3">[3]</A>
							 | 
						||
| 
								 | 
							
								Because of irreflexivity and transitivity, <tt>operator<</tt> always
							 | 
						||
| 
								 | 
							
								satisfies the definition of a <i>partial ordering</i>.  The definition of
							 | 
						||
| 
								 | 
							
								a <i>strict weak ordering</i> is stricter, and the definition of a
							 | 
						||
| 
								 | 
							
								<i>total ordering</i> is stricter still.
							 | 
						||
| 
								 | 
							
								<h3>See also</h3>
							 | 
						||
| 
								 | 
							
								<A href="http://www.sgi.com/Technology/STL/EqualityComparable.html">EqualityComparable</A>, <A href="http://www.sgi.com/Technology/STL/StrictWeakOrdering.html">StrictWeakOrdering</A>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<br>
							 | 
						||
| 
								 | 
							
								<HR>
							 | 
						||
| 
								 | 
							
								<TABLE>
							 | 
						||
| 
								 | 
							
								<TR valign=top>
							 | 
						||
| 
								 | 
							
								<TD nowrap>Copyright © 2000</TD><TD>
							 | 
						||
| 
								 | 
							
								<A HREF=http://www.lsc.nd.edu/~jsiek>Jeremy Siek</A>, Univ.of Notre Dame (<A HREF="mailto:jsiek@lsc.nd.edu">jsiek@lsc.nd.edu</A>)
							 | 
						||
| 
								 | 
							
								</TD></TR></TABLE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</BODY>
							 | 
						||
| 
								 | 
							
								</HTML> 
							 |