1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2<html xmlns="http://www.w3.org/1999/xhtml"> 3<head> 4<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 5<meta http-equiv="X-UA-Compatible" content="IE=9"/> 6<meta name="generator" content="Doxygen 1.8.9.1"/> 7<title>Boost.Sort: boost::sort Namespace Reference</title> 8<link href="tabs.css" rel="stylesheet" type="text/css"/> 9<script type="text/javascript" src="jquery.js"></script> 10<script type="text/javascript" src="dynsections.js"></script> 11<link href="search/search.css" rel="stylesheet" type="text/css"/> 12<script type="text/javascript" src="search/searchdata.js"></script> 13<script type="text/javascript" src="search/search.js"></script> 14<script type="text/javascript"> 15 $(document).ready(function() { init_search(); }); 16</script> 17<link href="doxygen.css" rel="stylesheet" type="text/css" /> 18</head> 19<body> 20<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 21<div id="titlearea"> 22<table cellspacing="0" cellpadding="0"> 23 <tbody> 24 <tr style="height: 56px;"> 25 <td style="padding-left: 0.5em;"> 26 <div id="projectname">Boost.Sort 27 </div> 28 </td> 29 </tr> 30 </tbody> 31</table> 32</div> 33<!-- end header part --> 34<!-- Generated by Doxygen 1.8.9.1 --> 35<script type="text/javascript"> 36var searchBox = new SearchBox("searchBox", "search",false,'Search'); 37</script> 38 <div id="navrow1" class="tabs"> 39 <ul class="tablist"> 40 <li><a href="index.html"><span>Main Page</span></a></li> 41 <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> 42 <li><a href="annotated.html"><span>Classes</span></a></li> 43 <li><a href="files.html"><span>Files</span></a></li> 44 <li> 45 <div id="MSearchBox" class="MSearchBoxInactive"> 46 <span class="left"> 47 <img id="MSearchSelect" src="search/mag_sel.png" 48 onmouseover="return searchBox.OnSearchSelectShow()" 49 onmouseout="return searchBox.OnSearchSelectHide()" 50 alt=""/> 51 <input type="text" id="MSearchField" value="Search" accesskey="S" 52 onfocus="searchBox.OnSearchFieldFocus(true)" 53 onblur="searchBox.OnSearchFieldFocus(false)" 54 onkeyup="searchBox.OnSearchFieldChange(event)"/> 55 </span><span class="right"> 56 <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> 57 </span> 58 </div> 59 </li> 60 </ul> 61 </div> 62 <div id="navrow2" class="tabs2"> 63 <ul class="tablist"> 64 <li><a href="namespaces.html"><span>Namespace List</span></a></li> 65 <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li> 66 </ul> 67 </div> 68<!-- window showing the filter options --> 69<div id="MSearchSelectWindow" 70 onmouseover="return searchBox.OnSearchSelectShow()" 71 onmouseout="return searchBox.OnSearchSelectHide()" 72 onkeydown="return searchBox.OnSearchSelectKey(event)"> 73</div> 74 75<!-- iframe showing the search results (closed by default) --> 76<div id="MSearchResultsWindow"> 77<iframe src="javascript:void(0)" frameborder="0" 78 name="MSearchResults" id="MSearchResults"> 79</iframe> 80</div> 81 82<div id="nav-path" class="navpath"> 83 <ul> 84<li class="navelem"><a class="el" href="namespaceboost.html">boost</a></li><li class="navelem"><a class="el" href="namespaceboost_1_1sort.html">sort</a></li> </ul> 85</div> 86</div><!-- top --> 87<div class="header"> 88 <div class="summary"> 89<a href="#func-members">Functions</a> </div> 90 <div class="headertitle"> 91<div class="title">boost::sort Namespace Reference</div> </div> 92</div><!--header--> 93<div class="contents"> 94<table class="memberdecls"> 95<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 96Functions</h2></td></tr> 97<tr class="memitem:ac3a946e197df6cfc4968c6371ace319b"><td class="memTemplParams" colspan="2">template<class Data_type , class Cast_type > </td></tr> 98<tr class="memitem:ac3a946e197df6cfc4968c6371ace319b"><td class="memTemplItemLeft" align="right" valign="top">Cast_type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#ac3a946e197df6cfc4968c6371ace319b">float_mem_cast</a> (const Data_type &data)</td></tr> 99<tr class="memdesc:ac3a946e197df6cfc4968c6371ace319b"><td class="mdescLeft"> </td><td class="mdescRight">Casts a float to the specified integer type. <a href="#ac3a946e197df6cfc4968c6371ace319b">More...</a><br /></td></tr> 100<tr class="separator:ac3a946e197df6cfc4968c6371ace319b"><td class="memSeparator" colspan="2"> </td></tr> 101<tr class="memitem:acbcfc139de18c5c35c0ff1744c56e211"><td class="memTemplParams" colspan="2">template<class RandomAccessIter > </td></tr> 102<tr class="memitem:acbcfc139de18c5c35c0ff1744c56e211"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#acbcfc139de18c5c35c0ff1744c56e211">float_sort</a> (RandomAccessIter first, RandomAccessIter last)</td></tr> 103<tr class="memdesc:acbcfc139de18c5c35c0ff1744c56e211"><td class="mdescLeft"> </td><td class="mdescRight"><code>float_sort</code> with casting to the appropriate size. <a href="#acbcfc139de18c5c35c0ff1744c56e211">More...</a><br /></td></tr> 104<tr class="separator:acbcfc139de18c5c35c0ff1744c56e211"><td class="memSeparator" colspan="2"> </td></tr> 105<tr class="memitem:ad65f9ec25686acfbd2a59683cc99be12"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Right_shift > </td></tr> 106<tr class="memitem:ad65f9ec25686acfbd2a59683cc99be12"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#ad65f9ec25686acfbd2a59683cc99be12">float_sort</a> (RandomAccessIter first, RandomAccessIter last, Right_shift rshift)</td></tr> 107<tr class="memdesc:ad65f9ec25686acfbd2a59683cc99be12"><td class="mdescLeft"> </td><td class="mdescRight">Floating-point sort algorithm using random access iterators with just right-shift functor. <a href="#ad65f9ec25686acfbd2a59683cc99be12">More...</a><br /></td></tr> 108<tr class="separator:ad65f9ec25686acfbd2a59683cc99be12"><td class="memSeparator" colspan="2"> </td></tr> 109<tr class="memitem:a941746cb1461c5f4971c2cf1efb9301e"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Right_shift , class Compare > </td></tr> 110<tr class="memitem:a941746cb1461c5f4971c2cf1efb9301e"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a941746cb1461c5f4971c2cf1efb9301e">float_sort</a> (RandomAccessIter first, RandomAccessIter last, Right_shift rshift, Compare comp)</td></tr> 111<tr class="memdesc:a941746cb1461c5f4971c2cf1efb9301e"><td class="mdescLeft"> </td><td class="mdescRight">Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator. <a href="#a941746cb1461c5f4971c2cf1efb9301e">More...</a><br /></td></tr> 112<tr class="separator:a941746cb1461c5f4971c2cf1efb9301e"><td class="memSeparator" colspan="2"> </td></tr> 113<tr class="memitem:ae6ffbcf932699589fd2b93879f209013"><td class="memTemplParams" colspan="2">template<class RandomAccessIter > </td></tr> 114<tr class="memitem:ae6ffbcf932699589fd2b93879f209013"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#ae6ffbcf932699589fd2b93879f209013">integer_sort</a> (RandomAccessIter first, RandomAccessIter last)</td></tr> 115<tr class="memdesc:ae6ffbcf932699589fd2b93879f209013"><td class="mdescLeft"> </td><td class="mdescRight">Integer sort algorithm using random access iterators. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). <a href="#ae6ffbcf932699589fd2b93879f209013">More...</a><br /></td></tr> 116<tr class="separator:ae6ffbcf932699589fd2b93879f209013"><td class="memSeparator" colspan="2"> </td></tr> 117<tr class="memitem:aa4ebb2541be58f9f0fecd8d7c108b817"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Right_shift , class Compare > </td></tr> 118<tr class="memitem:aa4ebb2541be58f9f0fecd8d7c108b817"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#aa4ebb2541be58f9f0fecd8d7c108b817">integer_sort</a> (RandomAccessIter first, RandomAccessIter last, Right_shift shift, Compare comp)</td></tr> 119<tr class="memdesc:aa4ebb2541be58f9f0fecd8d7c108b817"><td class="mdescLeft"> </td><td class="mdescRight">Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). <a href="#aa4ebb2541be58f9f0fecd8d7c108b817">More...</a><br /></td></tr> 120<tr class="separator:aa4ebb2541be58f9f0fecd8d7c108b817"><td class="memSeparator" colspan="2"> </td></tr> 121<tr class="memitem:ae50349854aad811f67a540d9b3aa4d4a"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Right_shift > </td></tr> 122<tr class="memitem:ae50349854aad811f67a540d9b3aa4d4a"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#ae50349854aad811f67a540d9b3aa4d4a">integer_sort</a> (RandomAccessIter first, RandomAccessIter last, Right_shift shift)</td></tr> 123<tr class="memdesc:ae50349854aad811f67a540d9b3aa4d4a"><td class="mdescLeft"> </td><td class="mdescRight">Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). <a href="#ae50349854aad811f67a540d9b3aa4d4a">More...</a><br /></td></tr> 124<tr class="separator:ae50349854aad811f67a540d9b3aa4d4a"><td class="memSeparator" colspan="2"> </td></tr> 125<tr class="memitem:a4bc25fdacd4c948f631f08a3f9aa38eb"><td class="memTemplParams" colspan="2">template<class RandomAccessIter > </td></tr> 126<tr class="memitem:a4bc25fdacd4c948f631f08a3f9aa38eb"><td class="memTemplItemLeft" align="right" valign="top">boost::enable_if_c< std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer, void >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a4bc25fdacd4c948f631f08a3f9aa38eb">spreadsort</a> (RandomAccessIter first, RandomAccessIter last)</td></tr> 127<tr class="memdesc:a4bc25fdacd4c948f631f08a3f9aa38eb"><td class="mdescLeft"> </td><td class="mdescRight">Generic <code>spreadsort</code> variant detecting integer-type elements so call to <code>integer_sort</code>. <a href="#a4bc25fdacd4c948f631f08a3f9aa38eb">More...</a><br /></td></tr> 128<tr class="separator:a4bc25fdacd4c948f631f08a3f9aa38eb"><td class="memSeparator" colspan="2"> </td></tr> 129<tr class="memitem:a94a736da091bd5d3b525818399f1b272"><td class="memTemplParams" colspan="2">template<class RandomAccessIter > </td></tr> 130<tr class="memitem:a94a736da091bd5d3b525818399f1b272"><td class="memTemplItemLeft" align="right" valign="top">boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_integer &&std::numeric_limits< typename std::iterator_traits< RandomAccessIter >::value_type >::is_iec559, void >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a94a736da091bd5d3b525818399f1b272">spreadsort</a> (RandomAccessIter first, RandomAccessIter last)</td></tr> 131<tr class="memdesc:a94a736da091bd5d3b525818399f1b272"><td class="mdescLeft"> </td><td class="mdescRight">Generic <code>spreadsort</code> variant detecting float element type so call to <code>float_sort</code>. <a href="#a94a736da091bd5d3b525818399f1b272">More...</a><br /></td></tr> 132<tr class="separator:a94a736da091bd5d3b525818399f1b272"><td class="memSeparator" colspan="2"> </td></tr> 133<tr class="memitem:aafdea66d9b4a7faef5604b3079b525fa"><td class="memTemplParams" colspan="2">template<class RandomAccessIter > </td></tr> 134<tr class="memitem:aafdea66d9b4a7faef5604b3079b525fa"><td class="memTemplItemLeft" align="right" valign="top">boost::enable_if_c< is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::string >::value||is_same< typename std::iterator_traits< RandomAccessIter >::value_type, typename std::wstring >::value, void >::type </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#aafdea66d9b4a7faef5604b3079b525fa">spreadsort</a> (RandomAccessIter first, RandomAccessIter last)</td></tr> 135<tr class="memdesc:aafdea66d9b4a7faef5604b3079b525fa"><td class="mdescLeft"> </td><td class="mdescRight">Generic <code>spreadsort</code> variant detecting string element type so call to <code>string_sort</code> for <code>std::strings</code> and <code>std::wstrings</code>. <a href="#aafdea66d9b4a7faef5604b3079b525fa">More...</a><br /></td></tr> 136<tr class="separator:aafdea66d9b4a7faef5604b3079b525fa"><td class="memSeparator" colspan="2"> </td></tr> 137<tr class="memitem:a950a2dbbe75f048a0b343dbf7c532dc0"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Unsigned_char_type > </td></tr> 138<tr class="memitem:a950a2dbbe75f048a0b343dbf7c532dc0"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a950a2dbbe75f048a0b343dbf7c532dc0">string_sort</a> (RandomAccessIter first, RandomAccessIter last, Unsigned_char_type unused)</td></tr> 139<tr class="memdesc:a950a2dbbe75f048a0b343dbf7c532dc0"><td class="mdescLeft"> </td><td class="mdescRight">String sort algorithm using random access iterators, allowing character-type overloads.<br /> 140 (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). <a href="#a950a2dbbe75f048a0b343dbf7c532dc0">More...</a><br /></td></tr> 141<tr class="separator:a950a2dbbe75f048a0b343dbf7c532dc0"><td class="memSeparator" colspan="2"> </td></tr> 142<tr class="memitem:a6acd5fc94521b0a5cb47dc491b6d862f"><td class="memTemplParams" colspan="2">template<class RandomAccessIter > </td></tr> 143<tr class="memitem:a6acd5fc94521b0a5cb47dc491b6d862f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a6acd5fc94521b0a5cb47dc491b6d862f">string_sort</a> (RandomAccessIter first, RandomAccessIter last)</td></tr> 144<tr class="memdesc:a6acd5fc94521b0a5cb47dc491b6d862f"><td class="mdescLeft"> </td><td class="mdescRight">String sort algorithm using random access iterators, wraps using default of unsigned char. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). <a href="#a6acd5fc94521b0a5cb47dc491b6d862f">More...</a><br /></td></tr> 145<tr class="separator:a6acd5fc94521b0a5cb47dc491b6d862f"><td class="memSeparator" colspan="2"> </td></tr> 146<tr class="memitem:a4ad4785d90f47d51ff1d2fac8c21bb48"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Compare , class Unsigned_char_type > </td></tr> 147<tr class="memitem:a4ad4785d90f47d51ff1d2fac8c21bb48"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a4ad4785d90f47d51ff1d2fac8c21bb48">reverse_string_sort</a> (RandomAccessIter first, RandomAccessIter last, Compare comp, Unsigned_char_type unused)</td></tr> 148<tr class="memdesc:a4ad4785d90f47d51ff1d2fac8c21bb48"><td class="mdescLeft"> </td><td class="mdescRight">String sort algorithm using random access iterators, allowing character-type overloads. <a href="#a4ad4785d90f47d51ff1d2fac8c21bb48">More...</a><br /></td></tr> 149<tr class="separator:a4ad4785d90f47d51ff1d2fac8c21bb48"><td class="memSeparator" colspan="2"> </td></tr> 150<tr class="memitem:afd4938835fd03aab9c42bd0653e5dbe5"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Compare > </td></tr> 151<tr class="memitem:afd4938835fd03aab9c42bd0653e5dbe5"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#afd4938835fd03aab9c42bd0653e5dbe5">reverse_string_sort</a> (RandomAccessIter first, RandomAccessIter last, Compare comp)</td></tr> 152<tr class="memdesc:afd4938835fd03aab9c42bd0653e5dbe5"><td class="mdescLeft"> </td><td class="mdescRight">String sort algorithm using random access iterators, wraps using default of <code>unsigned</code> char. <a href="#afd4938835fd03aab9c42bd0653e5dbe5">More...</a><br /></td></tr> 153<tr class="separator:afd4938835fd03aab9c42bd0653e5dbe5"><td class="memSeparator" colspan="2"> </td></tr> 154<tr class="memitem:a5143ec4f58cfe13eca2a0d6b6f6a6680"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Get_char , class Get_length > </td></tr> 155<tr class="memitem:a5143ec4f58cfe13eca2a0d6b6f6a6680"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a5143ec4f58cfe13eca2a0d6b6f6a6680">string_sort</a> (RandomAccessIter first, RandomAccessIter last, Get_char get_character, Get_length length)</td></tr> 156<tr class="memdesc:a5143ec4f58cfe13eca2a0d6b6f6a6680"><td class="mdescLeft"> </td><td class="mdescRight">String sort algorithm using random access iterators, wraps using default of <code>unsigned</code> char. <a href="#a5143ec4f58cfe13eca2a0d6b6f6a6680">More...</a><br /></td></tr> 157<tr class="separator:a5143ec4f58cfe13eca2a0d6b6f6a6680"><td class="memSeparator" colspan="2"> </td></tr> 158<tr class="memitem:a82c4c0d7ba9873ecce7c674631dceae2"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Get_char , class Get_length , class Compare > </td></tr> 159<tr class="memitem:a82c4c0d7ba9873ecce7c674631dceae2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a82c4c0d7ba9873ecce7c674631dceae2">string_sort</a> (RandomAccessIter first, RandomAccessIter last, Get_char get_character, Get_length length, Compare comp)</td></tr> 160<tr class="memdesc:a82c4c0d7ba9873ecce7c674631dceae2"><td class="mdescLeft"> </td><td class="mdescRight">String sort algorithm using random access iterators, wraps using default of <code>unsigned</code> char. <a href="#a82c4c0d7ba9873ecce7c674631dceae2">More...</a><br /></td></tr> 161<tr class="separator:a82c4c0d7ba9873ecce7c674631dceae2"><td class="memSeparator" colspan="2"> </td></tr> 162<tr class="memitem:a7940f1b2a7746c083a12a4e26077096b"><td class="memTemplParams" colspan="2">template<class RandomAccessIter , class Get_char , class Get_length , class Compare > </td></tr> 163<tr class="memitem:a7940f1b2a7746c083a12a4e26077096b"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceboost_1_1sort.html#a7940f1b2a7746c083a12a4e26077096b">reverse_string_sort</a> (RandomAccessIter first, RandomAccessIter last, Get_char get_character, Get_length length, Compare comp)</td></tr> 164<tr class="memdesc:a7940f1b2a7746c083a12a4e26077096b"><td class="mdescLeft"> </td><td class="mdescRight">Reverse String sort algorithm using random access iterators. <a href="#a7940f1b2a7746c083a12a4e26077096b">More...</a><br /></td></tr> 165<tr class="separator:a7940f1b2a7746c083a12a4e26077096b"><td class="memSeparator" colspan="2"> </td></tr> 166</table> 167<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 168<div class="textblock"><p>Namespace for spreadsort sort variants for different data types. </p><dl class="section note"><dt>Note</dt><dd>Use hyperlinks (coloured) to get detailed information about functions. </dd></dl> 169</div><h2 class="groupheader">Function Documentation</h2> 170<a class="anchor" id="ac3a946e197df6cfc4968c6371ace319b"></a> 171<div class="memitem"> 172<div class="memproto"> 173<div class="memtemplate"> 174template<class Data_type , class Cast_type > </div> 175<table class="mlabels"> 176 <tr> 177 <td class="mlabels-left"> 178 <table class="memname"> 179 <tr> 180 <td class="memname">Cast_type boost::sort::float_mem_cast </td> 181 <td>(</td> 182 <td class="paramtype">const Data_type & </td> 183 <td class="paramname"><em>data</em></td><td>)</td> 184 <td></td> 185 </tr> 186 </table> 187 </td> 188 <td class="mlabels-right"> 189<span class="mlabels"><span class="mlabel">inline</span></span> </td> 190 </tr> 191</table> 192</div><div class="memdoc"> 193 194<p>Casts a float to the specified integer type. </p> 195<dl class="tparams"><dt>Template Parameters</dt><dd> 196 <table class="tparams"> 197 <tr><td class="paramname">Data_type</td><td>Floating-point IEEE 754/IEC559 type. </td></tr> 198 <tr><td class="paramname">Cast_type</td><td>Integer type (same size) to which to cast.</td></tr> 199 </table> 200 </dd> 201</dl> 202<dl class="section user"><dt>Example:</dt><dd><div class="fragment"><div class="line"><span class="keyword">struct </span><a class="code" href="structrightshift.html">rightshift</a> {</div> 203<div class="line"> <span class="keywordtype">int</span> operator()(<span class="keyword">const</span> <a class="code" href="struct_d_a_t_a___t_y_p_e.html">DATA_TYPE</a> &x, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> offset)<span class="keyword"> const </span>{</div> 204<div class="line"> <span class="keywordflow">return</span> <a class="code" href="namespaceboost_1_1sort.html#ac3a946e197df6cfc4968c6371ace319b">float_mem_cast</a><<a class="code" href="floatfunctorsample_8cpp.html#ae35c40bc2f912c11f0e36ac66cba4489">KEY_TYPE</a>, <a class="code" href="double_8cpp.html#a38779bfd63dd113c9f7602664546a58c">CAST_TYPE</a>>(x.<a class="code" href="struct_d_a_t_a___t_y_p_e.html#aa28561fc8e223d84187ccfaf99953bae">key</a>) >> offset;</div> 205<div class="line"> }</div> 206<div class="line">};</div> 207</div><!-- fragment --> </dd></dl> 208 209</div> 210</div> 211<a class="anchor" id="acbcfc139de18c5c35c0ff1744c56e211"></a> 212<div class="memitem"> 213<div class="memproto"> 214<div class="memtemplate"> 215template<class RandomAccessIter > </div> 216<table class="mlabels"> 217 <tr> 218 <td class="mlabels-left"> 219 <table class="memname"> 220 <tr> 221 <td class="memname">void boost::sort::float_sort </td> 222 <td>(</td> 223 <td class="paramtype">RandomAccessIter </td> 224 <td class="paramname"><em>first</em>, </td> 225 </tr> 226 <tr> 227 <td class="paramkey"></td> 228 <td></td> 229 <td class="paramtype">RandomAccessIter </td> 230 <td class="paramname"><em>last</em> </td> 231 </tr> 232 <tr> 233 <td></td> 234 <td>)</td> 235 <td></td><td></td> 236 </tr> 237 </table> 238 </td> 239 <td class="mlabels-right"> 240<span class="mlabels"><span class="mlabel">inline</span></span> </td> 241 </tr> 242</table> 243</div><div class="memdoc"> 244 245<p><code>float_sort</code> with casting to the appropriate size. </p> 246<dl class="tparams"><dt>Template Parameters</dt><dd> 247 <table class="tparams"> 248 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a></td></tr> 249 </table> 250 </dd> 251</dl> 252<dl class="params"><dt>Parameters</dt><dd> 253 <table class="params"> 254 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 255 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data.</td></tr> 256 </table> 257 </dd> 258</dl> 259<p>Some performance plots of runtime vs. n and log(range) are provided:<br /> 260 <a href="../../doc/graph/windows_float_sort.htm">windows_float_sort</a> <br /> 261 <a href="../../doc/graph/osx_float_sort.htm">osx_float_sort</a></p> 262<dl class="section user"><dt>A simple example of sorting some floating-point is:</dt><dd><div class="fragment"><div class="line">vector<float> vec;</div> 263<div class="line">vec.push_back(1.0);</div> 264<div class="line">vec.push_back(2.3);</div> 265<div class="line">vec.push_back(1.3);</div> 266<div class="line"><a class="code" href="namespaceboost_1_1sort.html#a4bc25fdacd4c948f631f08a3f9aa38eb">spreadsort</a>(vec.begin(), vec.end());</div> 267</div><!-- fragment --> </dd></dl> 268<dl class="section user"><dt>The sorted vector contains ascending values "1.0 1.3 2.3".</dt><dd></dd></dl> 269 270</div> 271</div> 272<a class="anchor" id="ad65f9ec25686acfbd2a59683cc99be12"></a> 273<div class="memitem"> 274<div class="memproto"> 275<div class="memtemplate"> 276template<class RandomAccessIter , class Right_shift > </div> 277<table class="mlabels"> 278 <tr> 279 <td class="mlabels-left"> 280 <table class="memname"> 281 <tr> 282 <td class="memname">void boost::sort::float_sort </td> 283 <td>(</td> 284 <td class="paramtype">RandomAccessIter </td> 285 <td class="paramname"><em>first</em>, </td> 286 </tr> 287 <tr> 288 <td class="paramkey"></td> 289 <td></td> 290 <td class="paramtype">RandomAccessIter </td> 291 <td class="paramname"><em>last</em>, </td> 292 </tr> 293 <tr> 294 <td class="paramkey"></td> 295 <td></td> 296 <td class="paramtype">Right_shift </td> 297 <td class="paramname"><em>rshift</em> </td> 298 </tr> 299 <tr> 300 <td></td> 301 <td>)</td> 302 <td></td><td></td> 303 </tr> 304 </table> 305 </td> 306 <td class="mlabels-right"> 307<span class="mlabels"><span class="mlabel">inline</span></span> </td> 308 </tr> 309</table> 310</div><div class="memdoc"> 311 312<p>Floating-point sort algorithm using random access iterators with just right-shift functor. </p> 313<dl class="tparams"><dt>Template Parameters</dt><dd> 314 <table class="tparams"> 315 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 316 <tr><td class="paramname">Right_shift</td><td>Functor for right-shift by parameter <code>shift</code> bits.</td></tr> 317 </table> 318 </dd> 319</dl> 320<dl class="params"><dt>Parameters</dt><dd> 321 <table class="params"> 322 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 323 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 324 <tr><td class="paramdir">[in]</td><td class="paramname">rshift</td><td>Number of bits to right-shift (using functor). </td></tr> 325 </table> 326 </dd> 327</dl> 328 329</div> 330</div> 331<a class="anchor" id="a941746cb1461c5f4971c2cf1efb9301e"></a> 332<div class="memitem"> 333<div class="memproto"> 334<div class="memtemplate"> 335template<class RandomAccessIter , class Right_shift , class Compare > </div> 336<table class="mlabels"> 337 <tr> 338 <td class="mlabels-left"> 339 <table class="memname"> 340 <tr> 341 <td class="memname">void boost::sort::float_sort </td> 342 <td>(</td> 343 <td class="paramtype">RandomAccessIter </td> 344 <td class="paramname"><em>first</em>, </td> 345 </tr> 346 <tr> 347 <td class="paramkey"></td> 348 <td></td> 349 <td class="paramtype">RandomAccessIter </td> 350 <td class="paramname"><em>last</em>, </td> 351 </tr> 352 <tr> 353 <td class="paramkey"></td> 354 <td></td> 355 <td class="paramtype">Right_shift </td> 356 <td class="paramname"><em>rshift</em>, </td> 357 </tr> 358 <tr> 359 <td class="paramkey"></td> 360 <td></td> 361 <td class="paramtype">Compare </td> 362 <td class="paramname"><em>comp</em> </td> 363 </tr> 364 <tr> 365 <td></td> 366 <td>)</td> 367 <td></td><td></td> 368 </tr> 369 </table> 370 </td> 371 <td class="mlabels-right"> 372<span class="mlabels"><span class="mlabel">inline</span></span> </td> 373 </tr> 374</table> 375</div><div class="memdoc"> 376 377<p>Float sort algorithm using random access iterators with both right-shift and user-defined comparison operator. </p> 378<dl class="tparams"><dt>Template Parameters</dt><dd> 379 <table class="tparams"> 380 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 381 <tr><td class="paramname">Right_shift</td><td>functor for right-shift by parameter <code>shift</code> bits. </td></tr> 382 <tr><td class="paramname">Comp</td><td>To provide <code>operator<</code> for user-defined comparison.</td></tr> 383 </table> 384 </dd> 385</dl> 386<dl class="params"><dt>Parameters</dt><dd> 387 <table class="params"> 388 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 389 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 390 <tr><td class="paramdir">[in]</td><td class="paramname">rshift</td><td>Number of bits to right-shift (using functor). </td></tr> 391 <tr><td class="paramdir">[in]</td><td class="paramname">comp</td><td>comparison functor. </td></tr> 392 </table> 393 </dd> 394</dl> 395 396</div> 397</div> 398<a class="anchor" id="ae6ffbcf932699589fd2b93879f209013"></a> 399<div class="memitem"> 400<div class="memproto"> 401<div class="memtemplate"> 402template<class RandomAccessIter > </div> 403<table class="mlabels"> 404 <tr> 405 <td class="mlabels-left"> 406 <table class="memname"> 407 <tr> 408 <td class="memname">void boost::sort::integer_sort </td> 409 <td>(</td> 410 <td class="paramtype">RandomAccessIter </td> 411 <td class="paramname"><em>first</em>, </td> 412 </tr> 413 <tr> 414 <td class="paramkey"></td> 415 <td></td> 416 <td class="paramtype">RandomAccessIter </td> 417 <td class="paramname"><em>last</em> </td> 418 </tr> 419 <tr> 420 <td></td> 421 <td>)</td> 422 <td></td><td></td> 423 </tr> 424 </table> 425 </td> 426 <td class="mlabels-right"> 427<span class="mlabels"><span class="mlabel">inline</span></span> </td> 428 </tr> 429</table> 430</div><div class="memdoc"> 431 432<p>Integer sort algorithm using random access iterators. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). </p> 433<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 434Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 435<br /> 436Some performance plots of runtime vs. n and log(range) are provided:<br /> 437 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 438 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 439<dl class="tparams"><dt>Template Parameters</dt><dd> 440 <table class="tparams"> 441 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 442 </table> 443 </dd> 444</dl> 445<dl class="params"><dt>Parameters</dt><dd> 446 <table class="params"> 447 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 448 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data.</td></tr> 449 </table> 450 </dd> 451</dl> 452<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 453<dd> 454<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 455<dd> 456<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 457<dd> 458<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 459<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 460<dl class="exception"><dt>Exceptions</dt><dd> 461 <table class="exception"> 462 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 463 </table> 464 </dd> 465</dl> 466<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 467<dd> 468Invalid arguments cause undefined behaviour. </dd></dl> 469<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 470<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 471<dd> 472* N is <code>last</code> - <code>first</code>, </dd> 473<dd> 474* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 475<dd> 476* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 477 478</div> 479</div> 480<a class="anchor" id="aa4ebb2541be58f9f0fecd8d7c108b817"></a> 481<div class="memitem"> 482<div class="memproto"> 483<div class="memtemplate"> 484template<class RandomAccessIter , class Right_shift , class Compare > </div> 485<table class="mlabels"> 486 <tr> 487 <td class="mlabels-left"> 488 <table class="memname"> 489 <tr> 490 <td class="memname">void boost::sort::integer_sort </td> 491 <td>(</td> 492 <td class="paramtype">RandomAccessIter </td> 493 <td class="paramname"><em>first</em>, </td> 494 </tr> 495 <tr> 496 <td class="paramkey"></td> 497 <td></td> 498 <td class="paramtype">RandomAccessIter </td> 499 <td class="paramname"><em>last</em>, </td> 500 </tr> 501 <tr> 502 <td class="paramkey"></td> 503 <td></td> 504 <td class="paramtype">Right_shift </td> 505 <td class="paramname"><em>shift</em>, </td> 506 </tr> 507 <tr> 508 <td class="paramkey"></td> 509 <td></td> 510 <td class="paramtype">Compare </td> 511 <td class="paramname"><em>comp</em> </td> 512 </tr> 513 <tr> 514 <td></td> 515 <td>)</td> 516 <td></td><td></td> 517 </tr> 518 </table> 519 </td> 520 <td class="mlabels-right"> 521<span class="mlabels"><span class="mlabel">inline</span></span> </td> 522 </tr> 523</table> 524</div><div class="memdoc"> 525 526<p>Integer sort algorithm using random access iterators with both right-shift and user-defined comparison operator. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). </p> 527<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 528Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 529<br /> 530Some performance plots of runtime vs. n and log(range) are provided:<br /> 531 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 532 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 533<dl class="tparams"><dt>Template Parameters</dt><dd> 534 <table class="tparams"> 535 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 536 <tr><td class="paramname">Right_shift</td><td>functor for right-shift by parameter <code>shift</code> bits. </td></tr> 537 <tr><td class="paramname">Comp</td><td>To provide <code>operator<</code> for user-defined comparison.</td></tr> 538 </table> 539 </dd> 540</dl> 541<dl class="params"><dt>Parameters</dt><dd> 542 <table class="params"> 543 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 544 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 545 <tr><td class="paramdir">[in]</td><td class="paramname">shift</td><td>Number of bits to right-shift (using functor). </td></tr> 546 <tr><td class="paramdir">[in]</td><td class="paramname">comp</td><td>comparison functor.</td></tr> 547 </table> 548 </dd> 549</dl> 550<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 551<dd> 552<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 553<dd> 554<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 555<dd> 556<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 557<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 558<dl class="section return"><dt>Returns</dt><dd><code>void</code>.</dd></dl> 559<dl class="exception"><dt>Exceptions</dt><dd> 560 <table class="exception"> 561 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 562 </table> 563 </dd> 564</dl> 565<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 566<dd> 567Invalid arguments cause undefined behaviour. </dd></dl> 568<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 569<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 570<dd> 571* N is <code>last</code> - <code>first</code>, </dd> 572<dd> 573* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 574<dd> 575* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 576 577</div> 578</div> 579<a class="anchor" id="ae50349854aad811f67a540d9b3aa4d4a"></a> 580<div class="memitem"> 581<div class="memproto"> 582<div class="memtemplate"> 583template<class RandomAccessIter , class Right_shift > </div> 584<table class="mlabels"> 585 <tr> 586 <td class="mlabels-left"> 587 <table class="memname"> 588 <tr> 589 <td class="memname">void boost::sort::integer_sort </td> 590 <td>(</td> 591 <td class="paramtype">RandomAccessIter </td> 592 <td class="paramname"><em>first</em>, </td> 593 </tr> 594 <tr> 595 <td class="paramkey"></td> 596 <td></td> 597 <td class="paramtype">RandomAccessIter </td> 598 <td class="paramname"><em>last</em>, </td> 599 </tr> 600 <tr> 601 <td class="paramkey"></td> 602 <td></td> 603 <td class="paramtype">Right_shift </td> 604 <td class="paramname"><em>shift</em> </td> 605 </tr> 606 <tr> 607 <td></td> 608 <td>)</td> 609 <td></td><td></td> 610 </tr> 611 </table> 612 </td> 613 <td class="mlabels-right"> 614<span class="mlabels"><span class="mlabel">inline</span></span> </td> 615 </tr> 616</table> 617</div><div class="memdoc"> 618 619<p>Integer sort algorithm using random access iterators with just right-shift functor. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). </p> 620<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 621 </p><dl class="section user"><dt>Performance:</dt><dd>Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 622<br /> 623Some performance plots of runtime vs. n and log(range) are provided:<br /> 624 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a><br /> 625 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></dd></dl> 626<dl class="tparams"><dt>Template Parameters</dt><dd> 627 <table class="tparams"> 628 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 629 <tr><td class="paramname">Right_shift</td><td>functor for right-shift by parameter <code>shift</code> bits.</td></tr> 630 </table> 631 </dd> 632</dl> 633<dl class="params"><dt>Parameters</dt><dd> 634 <table class="params"> 635 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 636 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 637 <tr><td class="paramdir">[in]</td><td class="paramname">shift</td><td>Number of bits to right-shift (using functor).</td></tr> 638 </table> 639 </dd> 640</dl> 641<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 642<dd> 643<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 644<dd> 645<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 646<dd> 647<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 648<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 649<dl class="exception"><dt>Exceptions</dt><dd> 650 <table class="exception"> 651 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 652 </table> 653 </dd> 654</dl> 655<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 656<dd> 657Invalid arguments cause undefined behaviour. </dd></dl> 658<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 659<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 660<dd> 661* N is <code>last</code> - <code>first</code>, </dd> 662<dd> 663* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 664<dd> 665* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 666 667</div> 668</div> 669<a class="anchor" id="a4ad4785d90f47d51ff1d2fac8c21bb48"></a> 670<div class="memitem"> 671<div class="memproto"> 672<div class="memtemplate"> 673template<class RandomAccessIter , class Compare , class Unsigned_char_type > </div> 674<table class="mlabels"> 675 <tr> 676 <td class="mlabels-left"> 677 <table class="memname"> 678 <tr> 679 <td class="memname">void boost::sort::reverse_string_sort </td> 680 <td>(</td> 681 <td class="paramtype">RandomAccessIter </td> 682 <td class="paramname"><em>first</em>, </td> 683 </tr> 684 <tr> 685 <td class="paramkey"></td> 686 <td></td> 687 <td class="paramtype">RandomAccessIter </td> 688 <td class="paramname"><em>last</em>, </td> 689 </tr> 690 <tr> 691 <td class="paramkey"></td> 692 <td></td> 693 <td class="paramtype">Compare </td> 694 <td class="paramname"><em>comp</em>, </td> 695 </tr> 696 <tr> 697 <td class="paramkey"></td> 698 <td></td> 699 <td class="paramtype">Unsigned_char_type </td> 700 <td class="paramname"><em>unused</em> </td> 701 </tr> 702 <tr> 703 <td></td> 704 <td>)</td> 705 <td></td><td></td> 706 </tr> 707 </table> 708 </td> 709 <td class="mlabels-right"> 710<span class="mlabels"><span class="mlabel">inline</span></span> </td> 711 </tr> 712</table> 713</div><div class="memdoc"> 714 715<p>String sort algorithm using random access iterators, allowing character-type overloads. </p> 716<p>(All variants fall back to <code>std::sort</code> if the data size is too small, < detail::min_sort_size).</p> 717<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 718Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 719<br /> 720Some performance plots of runtime vs. n and log(range) are provided:<br /> 721 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 722 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 723<dl class="tparams"><dt>Template Parameters</dt><dd> 724 <table class="tparams"> 725 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 726 <tr><td class="paramname">Comp</td><td>To provide <code>operator<</code> for user-defined comparison. </td></tr> 727 <tr><td class="paramname">Unsigned_char_type</td><td>Unsigned character type used for string.</td></tr> 728 </table> 729 </dd> 730</dl> 731<dl class="params"><dt>Parameters</dt><dd> 732 <table class="params"> 733 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 734 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 735 <tr><td class="paramdir">[in]</td><td class="paramname">comp</td><td>comparison functor. </td></tr> 736 <tr><td class="paramdir">[in]</td><td class="paramname">unused</td><td>Unused ???</td></tr> 737 </table> 738 </dd> 739</dl> 740<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 741<dd> 742<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 743<dd> 744<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 745<dd> 746<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 747<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 748<dl class="section return"><dt>Returns</dt><dd><code>void</code>.</dd></dl> 749<dl class="exception"><dt>Exceptions</dt><dd> 750 <table class="exception"> 751 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 752 </table> 753 </dd> 754</dl> 755<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 756<dd> 757Invalid arguments cause undefined behaviour. </dd></dl> 758<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 759<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 760<dd> 761* N is <code>last</code> - <code>first</code>, </dd> 762<dd> 763* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 764<dd> 765* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 766 767</div> 768</div> 769<a class="anchor" id="afd4938835fd03aab9c42bd0653e5dbe5"></a> 770<div class="memitem"> 771<div class="memproto"> 772<div class="memtemplate"> 773template<class RandomAccessIter , class Compare > </div> 774<table class="mlabels"> 775 <tr> 776 <td class="mlabels-left"> 777 <table class="memname"> 778 <tr> 779 <td class="memname">void boost::sort::reverse_string_sort </td> 780 <td>(</td> 781 <td class="paramtype">RandomAccessIter </td> 782 <td class="paramname"><em>first</em>, </td> 783 </tr> 784 <tr> 785 <td class="paramkey"></td> 786 <td></td> 787 <td class="paramtype">RandomAccessIter </td> 788 <td class="paramname"><em>last</em>, </td> 789 </tr> 790 <tr> 791 <td class="paramkey"></td> 792 <td></td> 793 <td class="paramtype">Compare </td> 794 <td class="paramname"><em>comp</em> </td> 795 </tr> 796 <tr> 797 <td></td> 798 <td>)</td> 799 <td></td><td></td> 800 </tr> 801 </table> 802 </td> 803 <td class="mlabels-right"> 804<span class="mlabels"><span class="mlabel">inline</span></span> </td> 805 </tr> 806</table> 807</div><div class="memdoc"> 808 809<p>String sort algorithm using random access iterators, wraps using default of <code>unsigned</code> char. </p> 810<p>(All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>).</p> 811<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 812Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 813<br /> 814Some performance plots of runtime vs. n and log(range) are provided:<br /> 815 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 816 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 817<dl class="tparams"><dt>Template Parameters</dt><dd> 818 <table class="tparams"> 819 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 820 <tr><td class="paramname">Comp</td><td>To provide <code>operator<</code> for user-defined comparison.</td></tr> 821 </table> 822 </dd> 823</dl> 824<dl class="params"><dt>Parameters</dt><dd> 825 <table class="params"> 826 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 827 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 828 <tr><td class="paramdir">[in]</td><td class="paramname">comp</td><td>Comparison functor.</td></tr> 829 </table> 830 </dd> 831</dl> 832<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 833<dd> 834<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 835<dd> 836<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 837<dd> 838<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 839<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 840<dl class="section return"><dt>Returns</dt><dd><code>void</code>.</dd></dl> 841<dl class="exception"><dt>Exceptions</dt><dd> 842 <table class="exception"> 843 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 844 </table> 845 </dd> 846</dl> 847<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 848<dd> 849Invalid arguments cause undefined behaviour. </dd></dl> 850<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 851<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 852<dd> 853* N is <code>last</code> - <code>first</code>, </dd> 854<dd> 855* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 856<dd> 857* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 858 859</div> 860</div> 861<a class="anchor" id="a7940f1b2a7746c083a12a4e26077096b"></a> 862<div class="memitem"> 863<div class="memproto"> 864<div class="memtemplate"> 865template<class RandomAccessIter , class Get_char , class Get_length , class Compare > </div> 866<table class="mlabels"> 867 <tr> 868 <td class="mlabels-left"> 869 <table class="memname"> 870 <tr> 871 <td class="memname">void boost::sort::reverse_string_sort </td> 872 <td>(</td> 873 <td class="paramtype">RandomAccessIter </td> 874 <td class="paramname"><em>first</em>, </td> 875 </tr> 876 <tr> 877 <td class="paramkey"></td> 878 <td></td> 879 <td class="paramtype">RandomAccessIter </td> 880 <td class="paramname"><em>last</em>, </td> 881 </tr> 882 <tr> 883 <td class="paramkey"></td> 884 <td></td> 885 <td class="paramtype">Get_char </td> 886 <td class="paramname"><em>get_character</em>, </td> 887 </tr> 888 <tr> 889 <td class="paramkey"></td> 890 <td></td> 891 <td class="paramtype">Get_length </td> 892 <td class="paramname"><em>length</em>, </td> 893 </tr> 894 <tr> 895 <td class="paramkey"></td> 896 <td></td> 897 <td class="paramtype">Compare </td> 898 <td class="paramname"><em>comp</em> </td> 899 </tr> 900 <tr> 901 <td></td> 902 <td>)</td> 903 <td></td><td></td> 904 </tr> 905 </table> 906 </td> 907 <td class="mlabels-right"> 908<span class="mlabels"><span class="mlabel">inline</span></span> </td> 909 </tr> 910</table> 911</div><div class="memdoc"> 912 913<p>Reverse String sort algorithm using random access iterators. </p> 914<p>(All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>).</p> 915<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 916Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 917<br /> 918Some performance plots of runtime vs. n and log(range) are provided:<br /> 919 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 920 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 921<dl class="tparams"><dt>Template Parameters</dt><dd> 922 <table class="tparams"> 923 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 924 <tr><td class="paramname">Get_char</td><td>???. </td></tr> 925 <tr><td class="paramname">Get_length</td><td>??? TODO </td></tr> 926 <tr><td class="paramname">Comp</td><td>To provide <code>operator<</code> for user-defined comparison.</td></tr> 927 </table> 928 </dd> 929</dl> 930<dl class="params"><dt>Parameters</dt><dd> 931 <table class="params"> 932 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 933 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 934 <tr><td class="paramdir">[in]</td><td class="paramname">comp</td><td>comparison functor. </td></tr> 935 <tr><td class="paramdir">[in]</td><td class="paramname">get_character</td><td>??? </td></tr> 936 <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>???</td></tr> 937 </table> 938 </dd> 939</dl> 940<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 941<dd> 942<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 943<dd> 944<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd></dl> 945<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 946<dl class="section return"><dt>Returns</dt><dd><code>void</code>.</dd></dl> 947<dl class="exception"><dt>Exceptions</dt><dd> 948 <table class="exception"> 949 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 950 </table> 951 </dd> 952</dl> 953<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 954<dd> 955Invalid arguments cause undefined behaviour. </dd></dl> 956<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 957<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 958<dd> 959* N is <code>last</code> - <code>first</code>, </dd> 960<dd> 961* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 962<dd> 963* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 964 965</div> 966</div> 967<a class="anchor" id="a4bc25fdacd4c948f631f08a3f9aa38eb"></a> 968<div class="memitem"> 969<div class="memproto"> 970<div class="memtemplate"> 971template<class RandomAccessIter > </div> 972<table class="mlabels"> 973 <tr> 974 <td class="mlabels-left"> 975 <table class="memname"> 976 <tr> 977 <td class="memname">boost::enable_if_c< std::numeric_limits< typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer, void >::type boost::sort::spreadsort </td> 978 <td>(</td> 979 <td class="paramtype">RandomAccessIter </td> 980 <td class="paramname"><em>first</em>, </td> 981 </tr> 982 <tr> 983 <td class="paramkey"></td> 984 <td></td> 985 <td class="paramtype">RandomAccessIter </td> 986 <td class="paramname"><em>last</em> </td> 987 </tr> 988 <tr> 989 <td></td> 990 <td>)</td> 991 <td></td><td></td> 992 </tr> 993 </table> 994 </td> 995 <td class="mlabels-right"> 996<span class="mlabels"><span class="mlabel">inline</span></span> </td> 997 </tr> 998</table> 999</div><div class="memdoc"> 1000 1001<p>Generic <code>spreadsort</code> variant detecting integer-type elements so call to <code>integer_sort</code>. </p> 1002<p>If the data type provided is an integer, <code>integer_sort</code> is used. </p><dl class="section note"><dt>Note</dt><dd>Sorting other data types requires picking between <code>integer_sort</code>, <code>float_sort</code> and <code>string_sort</code> directly, as <code>spreadsort</code> won't accept types that don't have the appropriate <code>type_traits</code>. </dd></dl> 1003<dl class="tparams"><dt>Template Parameters</dt><dd> 1004 <table class="tparams"> 1005 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1006 </table> 1007 </dd> 1008</dl> 1009<dl class="params"><dt>Parameters</dt><dd> 1010 <table class="params"> 1011 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1012 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data.</td></tr> 1013 </table> 1014 </dd> 1015</dl> 1016<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1017<dd> 1018<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1019<dd> 1020<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 1021<dd> 1022<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 1023<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order. </dd></dl> 1024 1025</div> 1026</div> 1027<a class="anchor" id="a94a736da091bd5d3b525818399f1b272"></a> 1028<div class="memitem"> 1029<div class="memproto"> 1030<div class="memtemplate"> 1031template<class RandomAccessIter > </div> 1032<table class="mlabels"> 1033 <tr> 1034 <td class="mlabels-left"> 1035 <table class="memname"> 1036 <tr> 1037 <td class="memname">boost::enable_if_c< !std::numeric_limits< typename std::iterator_traits<RandomAccessIter>::value_type >::is_integer && std::numeric_limits< typename std::iterator_traits<RandomAccessIter>::value_type >::is_iec559, void >::type boost::sort::spreadsort </td> 1038 <td>(</td> 1039 <td class="paramtype">RandomAccessIter </td> 1040 <td class="paramname"><em>first</em>, </td> 1041 </tr> 1042 <tr> 1043 <td class="paramkey"></td> 1044 <td></td> 1045 <td class="paramtype">RandomAccessIter </td> 1046 <td class="paramname"><em>last</em> </td> 1047 </tr> 1048 <tr> 1049 <td></td> 1050 <td>)</td> 1051 <td></td><td></td> 1052 </tr> 1053 </table> 1054 </td> 1055 <td class="mlabels-right"> 1056<span class="mlabels"><span class="mlabel">inline</span></span> </td> 1057 </tr> 1058</table> 1059</div><div class="memdoc"> 1060 1061<p>Generic <code>spreadsort</code> variant detecting float element type so call to <code>float_sort</code>. </p> 1062<p>If the data type provided is a float or castable-float, <code>float_sort</code> is used. </p><dl class="section note"><dt>Note</dt><dd>Sorting other data types requires picking between <code>integer_sort</code>, <code>float_sort</code> and <code>string_sort</code> directly, as <code>spreadsort</code> won't accept types that don't have the appropriate <code>type_traits</code>.</dd></dl> 1063<dl class="tparams"><dt>Template Parameters</dt><dd> 1064 <table class="tparams"> 1065 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1066 </table> 1067 </dd> 1068</dl> 1069<dl class="params"><dt>Parameters</dt><dd> 1070 <table class="params"> 1071 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1072 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data.</td></tr> 1073 </table> 1074 </dd> 1075</dl> 1076<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1077<dd> 1078<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1079<dd> 1080<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 1081<dd> 1082<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 1083<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order. </dd></dl> 1084 1085</div> 1086</div> 1087<a class="anchor" id="aafdea66d9b4a7faef5604b3079b525fa"></a> 1088<div class="memitem"> 1089<div class="memproto"> 1090<div class="memtemplate"> 1091template<class RandomAccessIter > </div> 1092<table class="mlabels"> 1093 <tr> 1094 <td class="mlabels-left"> 1095 <table class="memname"> 1096 <tr> 1097 <td class="memname">boost::enable_if_c< is_same<typename std::iterator_traits<RandomAccessIter>::value_type, typename std::string>::value || is_same<typename std::iterator_traits<RandomAccessIter>::value_type, typename std::wstring>::value, void >::type boost::sort::spreadsort </td> 1098 <td>(</td> 1099 <td class="paramtype">RandomAccessIter </td> 1100 <td class="paramname"><em>first</em>, </td> 1101 </tr> 1102 <tr> 1103 <td class="paramkey"></td> 1104 <td></td> 1105 <td class="paramtype">RandomAccessIter </td> 1106 <td class="paramname"><em>last</em> </td> 1107 </tr> 1108 <tr> 1109 <td></td> 1110 <td>)</td> 1111 <td></td><td></td> 1112 </tr> 1113 </table> 1114 </td> 1115 <td class="mlabels-right"> 1116<span class="mlabels"><span class="mlabel">inline</span></span> </td> 1117 </tr> 1118</table> 1119</div><div class="memdoc"> 1120 1121<p>Generic <code>spreadsort</code> variant detecting string element type so call to <code>string_sort</code> for <code>std::strings</code> and <code>std::wstrings</code>. </p> 1122<p>If the data type provided is a string or wstring, <code>string_sort</code> is used. </p><dl class="section note"><dt>Note</dt><dd>Sorting other data types requires picking between <code>integer_sort</code>, <code>float_sort</code> and <code>string_sort</code> directly, as <code>spreadsort</code> won't accept types that don't have the appropriate <code>type_traits</code>.</dd></dl> 1123<dl class="tparams"><dt>Template Parameters</dt><dd> 1124 <table class="tparams"> 1125 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1126 </table> 1127 </dd> 1128</dl> 1129<dl class="params"><dt>Parameters</dt><dd> 1130 <table class="params"> 1131 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1132 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data.</td></tr> 1133 </table> 1134 </dd> 1135</dl> 1136<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1137<dd> 1138<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1139<dd> 1140<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 1141<dd> 1142<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 1143<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order. </dd></dl> 1144 1145</div> 1146</div> 1147<a class="anchor" id="a950a2dbbe75f048a0b343dbf7c532dc0"></a> 1148<div class="memitem"> 1149<div class="memproto"> 1150<div class="memtemplate"> 1151template<class RandomAccessIter , class Unsigned_char_type > </div> 1152<table class="mlabels"> 1153 <tr> 1154 <td class="mlabels-left"> 1155 <table class="memname"> 1156 <tr> 1157 <td class="memname">void boost::sort::string_sort </td> 1158 <td>(</td> 1159 <td class="paramtype">RandomAccessIter </td> 1160 <td class="paramname"><em>first</em>, </td> 1161 </tr> 1162 <tr> 1163 <td class="paramkey"></td> 1164 <td></td> 1165 <td class="paramtype">RandomAccessIter </td> 1166 <td class="paramname"><em>last</em>, </td> 1167 </tr> 1168 <tr> 1169 <td class="paramkey"></td> 1170 <td></td> 1171 <td class="paramtype">Unsigned_char_type </td> 1172 <td class="paramname"><em>unused</em> </td> 1173 </tr> 1174 <tr> 1175 <td></td> 1176 <td>)</td> 1177 <td></td><td></td> 1178 </tr> 1179 </table> 1180 </td> 1181 <td class="mlabels-right"> 1182<span class="mlabels"><span class="mlabel">inline</span></span> </td> 1183 </tr> 1184</table> 1185</div><div class="memdoc"> 1186 1187<p>String sort algorithm using random access iterators, allowing character-type overloads.<br /> 1188 (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). </p> 1189<p><code>string_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 1190</p><dl class="section user"><dt></dt><dd>Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 1191<br /> 1192Some performance plots of runtime vs. n and log(range) are provided:<br /> 1193<a href="../../doc/graph/windows_string_sort.htm">windows_string_sort</a><br /> 1194<a href="../../doc/graph/osx_string_sort.htm">osx_string_sort</a></dd></dl> 1195<dl class="tparams"><dt>Template Parameters</dt><dd> 1196 <table class="tparams"> 1197 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1198 <tr><td class="paramname">Unsigned_char_type</td><td>Unsigned character type used for string. </td></tr> 1199 </table> 1200 </dd> 1201</dl> 1202<dl class="params"><dt>Parameters</dt><dd> 1203 <table class="params"> 1204 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1205 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 1206 <tr><td class="paramdir">[in]</td><td class="paramname">unused</td><td>Unused ???</td></tr> 1207 </table> 1208 </dd> 1209</dl> 1210<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1211<dd> 1212<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1213<dd> 1214<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 1215<dd> 1216<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 1217<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 1218<dl class="exception"><dt>Exceptions</dt><dd> 1219 <table class="exception"> 1220 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 1221 </table> 1222 </dd> 1223</dl> 1224<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 1225<dd> 1226Invalid arguments cause undefined behaviour. </dd></dl> 1227<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 1228<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 1229<dd> 1230* N is <code>last</code> - <code>first</code>, </dd> 1231<dd> 1232* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 1233<dd> 1234* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 1235 1236</div> 1237</div> 1238<a class="anchor" id="a6acd5fc94521b0a5cb47dc491b6d862f"></a> 1239<div class="memitem"> 1240<div class="memproto"> 1241<div class="memtemplate"> 1242template<class RandomAccessIter > </div> 1243<table class="mlabels"> 1244 <tr> 1245 <td class="mlabels-left"> 1246 <table class="memname"> 1247 <tr> 1248 <td class="memname">void boost::sort::string_sort </td> 1249 <td>(</td> 1250 <td class="paramtype">RandomAccessIter </td> 1251 <td class="paramname"><em>first</em>, </td> 1252 </tr> 1253 <tr> 1254 <td class="paramkey"></td> 1255 <td></td> 1256 <td class="paramtype">RandomAccessIter </td> 1257 <td class="paramname"><em>last</em> </td> 1258 </tr> 1259 <tr> 1260 <td></td> 1261 <td>)</td> 1262 <td></td><td></td> 1263 </tr> 1264 </table> 1265 </td> 1266 <td class="mlabels-right"> 1267<span class="mlabels"><span class="mlabel">inline</span></span> </td> 1268 </tr> 1269</table> 1270</div><div class="memdoc"> 1271 1272<p>String sort algorithm using random access iterators, wraps using default of unsigned char. (All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>). </p> 1273<p><code>string_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 1274Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 1275<br /> 1276Some performance plots of runtime vs. n and log(range) are provided:<br /> 1277 <a href="../../doc/graph/windows_string_sort.htm">windows_string_sort</a> <br /> 1278 <a href="../../doc/graph/osx_string_sort.htm">osx_string_sort</a></p> 1279<dl class="tparams"><dt>Template Parameters</dt><dd> 1280 <table class="tparams"> 1281 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1282 </table> 1283 </dd> 1284</dl> 1285<dl class="params"><dt>Parameters</dt><dd> 1286 <table class="params"> 1287 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1288 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data.</td></tr> 1289 </table> 1290 </dd> 1291</dl> 1292<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1293<dd> 1294<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1295<dd> 1296<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 1297<dd> 1298<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 1299<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 1300<dl class="exception"><dt>Exceptions</dt><dd> 1301 <table class="exception"> 1302 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 1303 </table> 1304 </dd> 1305</dl> 1306<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 1307<dd> 1308Invalid arguments cause undefined behaviour. </dd></dl> 1309<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 1310<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 1311<dd> 1312* N is <code>last</code> - <code>first</code>, </dd> 1313<dd> 1314* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 1315<dd> 1316* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 1317 1318</div> 1319</div> 1320<a class="anchor" id="a5143ec4f58cfe13eca2a0d6b6f6a6680"></a> 1321<div class="memitem"> 1322<div class="memproto"> 1323<div class="memtemplate"> 1324template<class RandomAccessIter , class Get_char , class Get_length > </div> 1325<table class="mlabels"> 1326 <tr> 1327 <td class="mlabels-left"> 1328 <table class="memname"> 1329 <tr> 1330 <td class="memname">void boost::sort::string_sort </td> 1331 <td>(</td> 1332 <td class="paramtype">RandomAccessIter </td> 1333 <td class="paramname"><em>first</em>, </td> 1334 </tr> 1335 <tr> 1336 <td class="paramkey"></td> 1337 <td></td> 1338 <td class="paramtype">RandomAccessIter </td> 1339 <td class="paramname"><em>last</em>, </td> 1340 </tr> 1341 <tr> 1342 <td class="paramkey"></td> 1343 <td></td> 1344 <td class="paramtype">Get_char </td> 1345 <td class="paramname"><em>get_character</em>, </td> 1346 </tr> 1347 <tr> 1348 <td class="paramkey"></td> 1349 <td></td> 1350 <td class="paramtype">Get_length </td> 1351 <td class="paramname"><em>length</em> </td> 1352 </tr> 1353 <tr> 1354 <td></td> 1355 <td>)</td> 1356 <td></td><td></td> 1357 </tr> 1358 </table> 1359 </td> 1360 <td class="mlabels-right"> 1361<span class="mlabels"><span class="mlabel">inline</span></span> </td> 1362 </tr> 1363</table> 1364</div><div class="memdoc"> 1365 1366<p>String sort algorithm using random access iterators, wraps using default of <code>unsigned</code> char. </p> 1367<p>(All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>).</p> 1368<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 1369Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 1370<br /> 1371Some performance plots of runtime vs. n and log(range) are provided:<br /> 1372 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 1373 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 1374<dl class="tparams"><dt>Template Parameters</dt><dd> 1375 <table class="tparams"> 1376 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1377 <tr><td class="paramname">Get_char</td><td>Bracket functor equivalent to <code>operator</code>[], taking a number corresponding to the character offset.. </td></tr> 1378 <tr><td class="paramname">Get_length</td><td>Functor to get the length of the string in characters. TODO Check this and below and other places!!!</td></tr> 1379 </table> 1380 </dd> 1381</dl> 1382<dl class="params"><dt>Parameters</dt><dd> 1383 <table class="params"> 1384 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1385 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 1386 <tr><td class="paramdir">[in]</td><td class="paramname">get_character</td><td>Number corresponding to the character offset from bracket functor equivalent to <code>operator</code>[]. </td></tr> 1387 <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>Functor to get the length of the string in characters.</td></tr> 1388 </table> 1389 </dd> 1390</dl> 1391<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1392<dd> 1393<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1394<dd> 1395<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd> 1396<dd> 1397<code>RandomAccessIter</code> <code>value_type</code> supports the <code>operator>></code>, which returns an integer-type right-shifted a specified number of bits. </dd></dl> 1398<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 1399<dl class="section return"><dt>Returns</dt><dd><code>void</code>.</dd></dl> 1400<dl class="exception"><dt>Exceptions</dt><dd> 1401 <table class="exception"> 1402 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 1403 </table> 1404 </dd> 1405</dl> 1406<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 1407<dd> 1408Invalid arguments cause undefined behaviour. </dd></dl> 1409<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 1410<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 1411<dd> 1412* N is <code>last</code> - <code>first</code>, </dd> 1413<dd> 1414* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 1415<dd> 1416* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 1417 1418</div> 1419</div> 1420<a class="anchor" id="a82c4c0d7ba9873ecce7c674631dceae2"></a> 1421<div class="memitem"> 1422<div class="memproto"> 1423<div class="memtemplate"> 1424template<class RandomAccessIter , class Get_char , class Get_length , class Compare > </div> 1425<table class="mlabels"> 1426 <tr> 1427 <td class="mlabels-left"> 1428 <table class="memname"> 1429 <tr> 1430 <td class="memname">void boost::sort::string_sort </td> 1431 <td>(</td> 1432 <td class="paramtype">RandomAccessIter </td> 1433 <td class="paramname"><em>first</em>, </td> 1434 </tr> 1435 <tr> 1436 <td class="paramkey"></td> 1437 <td></td> 1438 <td class="paramtype">RandomAccessIter </td> 1439 <td class="paramname"><em>last</em>, </td> 1440 </tr> 1441 <tr> 1442 <td class="paramkey"></td> 1443 <td></td> 1444 <td class="paramtype">Get_char </td> 1445 <td class="paramname"><em>get_character</em>, </td> 1446 </tr> 1447 <tr> 1448 <td class="paramkey"></td> 1449 <td></td> 1450 <td class="paramtype">Get_length </td> 1451 <td class="paramname"><em>length</em>, </td> 1452 </tr> 1453 <tr> 1454 <td class="paramkey"></td> 1455 <td></td> 1456 <td class="paramtype">Compare </td> 1457 <td class="paramname"><em>comp</em> </td> 1458 </tr> 1459 <tr> 1460 <td></td> 1461 <td>)</td> 1462 <td></td><td></td> 1463 </tr> 1464 </table> 1465 </td> 1466 <td class="mlabels-right"> 1467<span class="mlabels"><span class="mlabel">inline</span></span> </td> 1468 </tr> 1469</table> 1470</div><div class="memdoc"> 1471 1472<p>String sort algorithm using random access iterators, wraps using default of <code>unsigned</code> char. </p> 1473<p>(All variants fall back to <code>std::sort</code> if the data size is too small, < <code>detail::min_sort_size</code>).</p> 1474<p><code>integer_sort</code> is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than <code>std::sort</code> for large tests (>=100kB).<br /> 1475Worst-case performance is <em> O(N * (lg(range)/s + s)) </em>, so <code>integer_sort</code> is asymptotically faster than pure comparison-based algorithms. <code>s</code> is <code>max_splits</code>, which defaults to 11, so its worst-case with default settings for 32-bit integers is <em> O(N * ((32/11) </em> slow radix-based iterations fast comparison-based iterations).<br /> 1476<br /> 1477Some performance plots of runtime vs. n and log(range) are provided:<br /> 1478 <a href="../../doc/graph/windows_integer_sort.htm">windows_integer_sort</a> <br /> 1479 <a href="../../doc/graph/osx_integer_sort.htm">osx_integer_sort</a></p> 1480<dl class="tparams"><dt>Template Parameters</dt><dd> 1481 <table class="tparams"> 1482 <tr><td class="paramname">RandomAccessIter</td><td><a href="http://www.cplusplus.com/reference/iterator/RandomAccessIterator/">Random access iterator</a> </td></tr> 1483 <tr><td class="paramname">Get_char</td><td>???. </td></tr> 1484 <tr><td class="paramname">Get_length</td><td>??? TODO </td></tr> 1485 <tr><td class="paramname">Comp</td><td>To provide <code>operator<</code> for user-defined comparison.</td></tr> 1486 </table> 1487 </dd> 1488</dl> 1489<dl class="params"><dt>Parameters</dt><dd> 1490 <table class="params"> 1491 <tr><td class="paramdir">[in]</td><td class="paramname">first</td><td>Iterator pointer to first element. </td></tr> 1492 <tr><td class="paramdir">[in]</td><td class="paramname">last</td><td>Iterator pointing to one beyond the end of data. </td></tr> 1493 <tr><td class="paramdir">[in]</td><td class="paramname">comp</td><td>comparison functor. </td></tr> 1494 <tr><td class="paramdir">[in]</td><td class="paramname">get_character</td><td>??? </td></tr> 1495 <tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>???</td></tr> 1496 </table> 1497 </dd> 1498</dl> 1499<dl class="section pre"><dt>Precondition</dt><dd>[<code>first</code>, <code>last</code>) is a valid range. </dd> 1500<dd> 1501<code>RandomAccessIter</code> <code>value_type</code> is mutable. </dd> 1502<dd> 1503<code>RandomAccessIter</code> <code>value_type</code> is <a href="http://en.cppreference.com/w/cpp/concept/LessThanComparable">LessThanComparable</a> </dd></dl> 1504<dl class="section post"><dt>Postcondition</dt><dd>The elements in the range [<code>first</code>, <code>last</code>) are sorted in ascending order.</dd></dl> 1505<dl class="section return"><dt>Returns</dt><dd><code>void</code>.</dd></dl> 1506<dl class="exception"><dt>Exceptions</dt><dd> 1507 <table class="exception"> 1508 <tr><td class="paramname">std::exception</td><td>Propagates exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw.</td></tr> 1509 </table> 1510 </dd> 1511</dl> 1512<dl class="section warning"><dt>Warning</dt><dd>Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. </dd> 1513<dd> 1514Invalid arguments cause undefined behaviour. </dd></dl> 1515<dl class="section note"><dt>Note</dt><dd><code>spreadsort</code> function provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.</dd></dl> 1516<dl class="section remark"><dt>Remarks</dt><dd>The lesser of <em> O(N*log(N)) </em> comparisons and <em> O(N*log(K/S + S)) </em>operations worst-case, where: </dd> 1517<dd> 1518* N is <code>last</code> - <code>first</code>, </dd> 1519<dd> 1520* K is the log of the range in bits (32 for 32-bit integers using their full range), </dd> 1521<dd> 1522* S is a constant called max_splits, defaulting to 11 (except for strings where it is the log of the character size). </dd></dl> 1523 1524</div> 1525</div> 1526</div><!-- contents --> 1527<!-- start footer part --> 1528<hr class="footer"/><address class="footer"><small> 1529Generated on Fri Jan 9 2015 14:20:24 for Boost.Sort by  <a href="http://www.doxygen.org/index.html"> 1530<img class="footer" src="doxygen.png" alt="doxygen"/> 1531</a> 1.8.9.1 1532</small></address> 1533</body> 1534</html> 1535