A<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FSTL_Algorithms_Sorting%2Fcustom_comparer</id>
		<title>C++/STL Algorithms Sorting/custom comparer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://cppe.ru/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FSTL_Algorithms_Sorting%2Fcustom_comparer"/>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B/STL_Algorithms_Sorting/custom_comparer&amp;action=history"/>
		<updated>2026-04-10T14:49:27Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B/STL_Algorithms_Sorting/custom_comparer&amp;diff=1821&amp;oldid=prev</id>
		<title> в 14:21, 25 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B/STL_Algorithms_Sorting/custom_comparer&amp;diff=1821&amp;oldid=prev"/>
				<updated>2010-05-25T14:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 14:21, 25 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://cppe.ru/index.php?title=C%2B%2B/STL_Algorithms_Sorting/custom_comparer&amp;diff=1822&amp;oldid=prev</id>
		<title>Admin: 1 версия:&amp;#32;Импорт контента...</title>
		<link rel="alternate" type="text/html" href="http://cppe.ru/index.php?title=C%2B%2B/STL_Algorithms_Sorting/custom_comparer&amp;diff=1822&amp;oldid=prev"/>
				<updated>2010-05-25T10:27:57Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия: Импорт контента...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Sort objects stored in deque==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
/* The following code example is taken from the book&lt;br /&gt;
 * &amp;quot;The C++ Standard Library - A Tutorial and Reference&amp;quot;&lt;br /&gt;
 * by Nicolai M. Josuttis, Addison-Wesley, 1999&lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright Nicolai M. Josuttis 1999.&lt;br /&gt;
 * Permission to copy, use, modify, sell and distribute this software&lt;br /&gt;
 * is granted provided this copyright notice appears in all copies.&lt;br /&gt;
 * This software is provided &amp;quot;as is&amp;quot; without express or implied&lt;br /&gt;
 * warranty, and with no claim as to its suitability for any purpose.&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;deque&amp;gt;&lt;br /&gt;
#include &amp;lt;set&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
/* class Person&lt;br /&gt;
 */&lt;br /&gt;
class Person {&lt;br /&gt;
  private:&lt;br /&gt;
    string fn;    // first name&lt;br /&gt;
    string ln;    // last name&lt;br /&gt;
  public:&lt;br /&gt;
    Person() {&lt;br /&gt;
    }&lt;br /&gt;
    Person(const string&amp;amp; f, const string&amp;amp; n)&lt;br /&gt;
     : fn(f), ln(n) {&lt;br /&gt;
    }&lt;br /&gt;
    string firstname() const;&lt;br /&gt;
    string lastname() const;&lt;br /&gt;
    // ...&lt;br /&gt;
};&lt;br /&gt;
inline string Person::firstname() const {&lt;br /&gt;
    return fn;&lt;br /&gt;
}&lt;br /&gt;
inline string Person::lastname() const {&lt;br /&gt;
    return ln;&lt;br /&gt;
}&lt;br /&gt;
ostream&amp;amp; operator&amp;lt;&amp;lt; (ostream&amp;amp; s, const Person&amp;amp; p)&lt;br /&gt;
{&lt;br /&gt;
    s &amp;lt;&amp;lt; &amp;quot;[&amp;quot; &amp;lt;&amp;lt; p.firstname() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; p.lastname() &amp;lt;&amp;lt; &amp;quot;]&amp;quot;;&lt;br /&gt;
    return s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* binary function predicate:&lt;br /&gt;
 * - returns whether a person is less than another person&lt;br /&gt;
 */&lt;br /&gt;
bool personSortCriterion (const Person&amp;amp; p1, const Person&amp;amp; p2)&lt;br /&gt;
{&lt;br /&gt;
    /* a person is less than another person&lt;br /&gt;
     * - if the last name is less&lt;br /&gt;
     * - if the last name is equal and the first name is less&lt;br /&gt;
     */&lt;br /&gt;
    return p1.lastname()&amp;lt;p2.lastname() ||&lt;br /&gt;
           (p1.lastname()==p2.lastname() &amp;amp;&amp;amp;&lt;br /&gt;
            p1.firstname()&amp;lt;p2.firstname());&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    // create some persons&lt;br /&gt;
    Person p1(&amp;quot;nicolai&amp;quot;,&amp;quot;josuttis&amp;quot;);&lt;br /&gt;
    Person p2(&amp;quot;ulli&amp;quot;,&amp;quot;josuttis&amp;quot;);&lt;br /&gt;
    Person p3(&amp;quot;anica&amp;quot;,&amp;quot;josuttis&amp;quot;);&lt;br /&gt;
    Person p4(&amp;quot;lucas&amp;quot;,&amp;quot;josuttis&amp;quot;);&lt;br /&gt;
    Person p5(&amp;quot;lucas&amp;quot;,&amp;quot;otto&amp;quot;);&lt;br /&gt;
    Person p6(&amp;quot;lucas&amp;quot;,&amp;quot;arm&amp;quot;);&lt;br /&gt;
    Person p7(&amp;quot;anica&amp;quot;,&amp;quot;holle&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // insert person into collection coll&lt;br /&gt;
    deque&amp;lt;Person&amp;gt; coll;&lt;br /&gt;
    coll.push_back(p1);&lt;br /&gt;
    coll.push_back(p2);&lt;br /&gt;
    coll.push_back(p3);&lt;br /&gt;
    coll.push_back(p4);&lt;br /&gt;
    coll.push_back(p5);&lt;br /&gt;
    coll.push_back(p6);&lt;br /&gt;
    coll.push_back(p7);&lt;br /&gt;
    // print elements&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;deque before sort():&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    deque&amp;lt;Person&amp;gt;::iterator pos;&lt;br /&gt;
    for (pos = coll.begin(); pos != coll.end(); ++pos) {&lt;br /&gt;
        cout &amp;lt;&amp;lt; *pos &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
    // sort elements&lt;br /&gt;
    sort(coll.begin(),coll.end(),    // range&lt;br /&gt;
         personSortCriterion);       // sort criterion&lt;br /&gt;
    // print elements&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;deque after sort():&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    for (pos = coll.begin(); pos != coll.end(); ++pos) {&lt;br /&gt;
        cout &amp;lt;&amp;lt; *pos &amp;lt;&amp;lt; endl;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/* &lt;br /&gt;
deque before sort():&lt;br /&gt;
[nicolai josuttis]&lt;br /&gt;
[ulli josuttis]&lt;br /&gt;
[anica josuttis]&lt;br /&gt;
[lucas josuttis]&lt;br /&gt;
[lucas otto]&lt;br /&gt;
[lucas arm]&lt;br /&gt;
[anica holle]&lt;br /&gt;
deque after sort():&lt;br /&gt;
[lucas arm]&lt;br /&gt;
[anica holle]&lt;br /&gt;
[anica josuttis]&lt;br /&gt;
[lucas josuttis]&lt;br /&gt;
[nicolai josuttis]&lt;br /&gt;
[ulli josuttis]&lt;br /&gt;
[lucas otto]&lt;br /&gt;
 */        &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use sorting criterion in sort function==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
/* The following code example is taken from the book&lt;br /&gt;
 * &amp;quot;The C++ Standard Library - A Tutorial and Reference&amp;quot;&lt;br /&gt;
 * by Nicolai M. Josuttis, Addison-Wesley, 1999&lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright Nicolai M. Josuttis 1999.&lt;br /&gt;
 * Permission to copy, use, modify, sell and distribute this software&lt;br /&gt;
 * is granted provided this copyright notice appears in all copies.&lt;br /&gt;
 * This software is provided &amp;quot;as is&amp;quot; without express or implied&lt;br /&gt;
 * warranty, and with no claim as to its suitability for any purpose.&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;deque&amp;gt;&lt;br /&gt;
#include &amp;lt;list&amp;gt;&lt;br /&gt;
#include &amp;lt;set&amp;gt;&lt;br /&gt;
#include &amp;lt;map&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;algorithm&amp;gt;&lt;br /&gt;
#include &amp;lt;iterator&amp;gt;&lt;br /&gt;
#include &amp;lt;functional&amp;gt;&lt;br /&gt;
#include &amp;lt;numeric&amp;gt;&lt;br /&gt;
/* PRINT_ELEMENTS()&lt;br /&gt;
 * - prints optional C-string optcstr followed by&lt;br /&gt;
 * - all elements of the collection coll&lt;br /&gt;
 * - separated by spaces&lt;br /&gt;
 */&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
inline void PRINT_ELEMENTS (const T&amp;amp; coll, const char* optcstr=&amp;quot;&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    typename T::const_iterator pos;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; optcstr;&lt;br /&gt;
    for (pos=coll.begin(); pos!=coll.end(); ++pos) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; *pos &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&lt;br /&gt;
/* INSERT_ELEMENTS (collection, first, last)&lt;br /&gt;
 * - fill values from first to last into the collection&lt;br /&gt;
 * - NOTE: NO half-open range&lt;br /&gt;
 */&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
inline void INSERT_ELEMENTS (T&amp;amp; coll, int first, int last)&lt;br /&gt;
{&lt;br /&gt;
    for (int i=first; i&amp;lt;=last; ++i) {&lt;br /&gt;
        coll.insert(coll.end(),i);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
using namespace std;&lt;br /&gt;
void printCollection (const list&amp;lt;int&amp;gt;&amp;amp; l)&lt;br /&gt;
{&lt;br /&gt;
    PRINT_ELEMENTS(l);&lt;br /&gt;
}&lt;br /&gt;
bool lessForCollection (const list&amp;lt;int&amp;gt;&amp;amp; l1, const list&amp;lt;int&amp;gt;&amp;amp; l2)&lt;br /&gt;
{&lt;br /&gt;
    return lexicographical_compare&lt;br /&gt;
                (l1.begin(), l1.end(),   // first range&lt;br /&gt;
                 l2.begin(), l2.end());  // second range&lt;br /&gt;
}&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    list&amp;lt;int&amp;gt; c1, c2, c3, c4;&lt;br /&gt;
    // fill all collections with the same starting values&lt;br /&gt;
    INSERT_ELEMENTS(c1,1,5);&lt;br /&gt;
    c4 = c3 = c2 = c1;&lt;br /&gt;
    // and now some differences&lt;br /&gt;
    c1.push_back(7);&lt;br /&gt;
    c3.push_back(2);&lt;br /&gt;
    c3.push_back(0);&lt;br /&gt;
    c4.push_back(2);&lt;br /&gt;
    // create collection of collections&lt;br /&gt;
    vector&amp;lt;list&amp;lt;int&amp;gt; &amp;gt; cc;&lt;br /&gt;
    cc.push_back(c1);&lt;br /&gt;
    cc.push_back(c2);&lt;br /&gt;
    cc.push_back(c3);&lt;br /&gt;
    cc.push_back(c4);&lt;br /&gt;
    cc.push_back(c3);&lt;br /&gt;
    cc.push_back(c1);&lt;br /&gt;
    cc.push_back(c4);&lt;br /&gt;
    cc.push_back(c2);&lt;br /&gt;
    // print all collections&lt;br /&gt;
    for_each (cc.begin(), cc.end(),&lt;br /&gt;
              printCollection);&lt;br /&gt;
    cout &amp;lt;&amp;lt; endl;&lt;br /&gt;
    // sort collection lexicographically&lt;br /&gt;
    sort (cc.begin(), cc.end(),    // range&lt;br /&gt;
          lessForCollection);      // sorting criterion&lt;br /&gt;
    // print all collections again&lt;br /&gt;
    for_each (cc.begin(), cc.end(),&lt;br /&gt;
              printCollection);&lt;br /&gt;
}&lt;br /&gt;
/* &lt;br /&gt;
1 2 3 4 5 7&lt;br /&gt;
1 2 3 4 5&lt;br /&gt;
1 2 3 4 5 2 0&lt;br /&gt;
1 2 3 4 5 2&lt;br /&gt;
1 2 3 4 5 2 0&lt;br /&gt;
1 2 3 4 5 7&lt;br /&gt;
1 2 3 4 5 2&lt;br /&gt;
1 2 3 4 5&lt;br /&gt;
1 2 3 4 5&lt;br /&gt;
1 2 3 4 5&lt;br /&gt;
1 2 3 4 5 2&lt;br /&gt;
1 2 3 4 5 2&lt;br /&gt;
1 2 3 4 5 2 0&lt;br /&gt;
1 2 3 4 5 2 0&lt;br /&gt;
1 2 3 4 5 7&lt;br /&gt;
1 2 3 4 5 7&lt;br /&gt;
 */&lt;br /&gt;
        &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>