<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[sortieren einer datenstruktur mit mehreren sortier-kriterien]]></title><description><![CDATA[<p>hallo!<br />
Ich habe ein kleines Problem!<br />
Ich habe eine Tabelle (vector) von Daten-Objekten die ich anhand mehrerer Sortier-Kriterien mit der STL stable_sort-Methode sortieren möchte.</p>
<p>Ich habe dazu mal folgendes gemacht:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
using namespace std;

// ausgabe der aktuellen vergleichsoperation
void printCompare(const DataObject&amp; next, const DataObject&amp; current, Sort* sort)
{
    cout &lt;&lt; &quot;compare '&quot;;
    next.print();
    cout &lt;&lt; &quot;' to '&quot;;
    current.print();
    cout &lt;&lt; &quot;'&quot;;
    if( sort != NULL &amp;&amp; !sort-&gt;order_.empty() )
    {
        cout &lt;&lt; &quot; using &quot;;
        for( vector&lt;pair&lt;string, bool&gt; &gt;::iterator it = sort-&gt;order_.begin(); it != sort-&gt;order_.end(); it++ )
            cout &lt;&lt; (*it).first &lt;&lt; &quot; &quot; &lt;&lt; ((*it).second ? &quot;(asc)&quot; : &quot;(desc)&quot;) &lt;&lt; &quot; &quot;;
    }
    cout &lt;&lt; endl;
}

void printIsLess(const DataObject&amp; next, const DataObject&amp; current)
{
    cout &lt;&lt; &quot;'&quot;;
    next.print();
    cout &lt;&lt; &quot;' is less or equal to '&quot;;
    current.print();
    cout &lt;&lt; &quot;'&quot; &lt;&lt; endl;
}

class DataObject
{
    public:
        DataObject(const string&amp; m1, const string&amp; m2, const string&amp; m3) : m1_(m1), m2_(m2), m3_(m3) {}
        ~DataObject() {}

        const string&amp; m1() const { return m1_; }
        void m1(const string&amp; m1) { m1_ = m1; }

        const string&amp; m2() const { return m2_; }
        void m2(const string&amp; m2) { m2_ = m2; }

        const string&amp; m3() const { return m3_; }
        void m3(const string&amp; m3) { m3_ = m3; }

    public:
        void print() const { cout &lt;&lt; m1_ &lt;&lt; &quot; &quot; &lt;&lt; m2_ &lt;&lt; &quot; &quot; &lt;&lt; m3_; }

    private:
        string m1_;
        string m2_;
        string m3_;
};

class DataCollection : public vector&lt;DataObject&gt;
{
    public:
        DataCollection() {}
        virtual ~DataCollection() {}

    public:
        void sort(Sort* sort)
        {
            if( sort != NULL &amp;&amp; !sort-&gt;order_.empty() )
            {
                DataSort ds(sort);
                std::stable_sort(begin(), end(), ds);
            }
        }

    public:
        void print() const
        {
            for( const_iterator it=begin(); it!=end(); it++ )
            {
                (*it).print();
                cout &lt;&lt; endl;
            }
        }
};

// hier sind die kriterien hinterlegt
class Sort
{
    public:
        Sort() {}
        virtual ~Sort() {}

    public:
        bool valid() const { return !order_.empty(); }

    public:
        vector&lt;pair&lt;string, bool&gt; &gt; order_;
};

// hier die sortier-methode
class DataSort
{
    public:
        DataSort(Sort* sort=NULL) { sort_ = sort; }
        virtual ~DataSort() {}

    public:
        bool operator()(const DataObject&amp; d1, const DataObject&amp; d2)
        {
            if( sort_ != NULL &amp;&amp; !sort_-&gt;order_.empty() )
            {
                printCompare(next, current, sort_);

                for( vector&lt;pair&lt;string, bool&gt; &gt;::iterator it = sort_-&gt;order_.begin(); it != sort_-&gt;order_.end(); it++ )
                {
                    if( strcasecmp((*it).first.c_str(), &quot;m1&quot;) == 0 )
                    {
                        if( (*it).second &amp;&amp; next.m1() &gt; current.m1() )
                            return false;
                        else if( !(*it).second &amp;&amp; next.m1() &lt; current.m1() )
                            return false;
                    }
                    else if( strcasecmp((*it).first.c_str(), &quot;m2&quot;) == 0 )
                    {
                        if( (*it).second &amp;&amp; next.m2() &gt; current.m2() )
                            return false;
                        else if( !(*it).second &amp;&amp; next.m2() &lt; current.m2() )
                            return false;
                    }
                    else if( strcasecmp((*it).first.c_str(), &quot;m3&quot;) == 0 )
                    {
                        if( (*it).second &amp;&amp; next.m3() &gt; current.m3() )
                            return false;
                        else if( !(*it).second &amp;&amp; next.m3() &lt; current.m3() )
                            return false;
                    }
                }

                printIsLess(next, current);
                return true;
            }

            return false;
        }

    private:
        Sort* sort_;
};

void PrintCollection(const string&amp; msg, const DataCollection&amp; dc)
{
    cout &lt;&lt; msg &lt;&lt; endl;
    dc.print();
    cout &lt;&lt; endl;
}

void Test(DataCollection&amp; dc)
{
    // sortiere nach m1 aufsteigend und m2 absteigend
    cout &lt;&lt; &quot;Test:&quot; &lt;&lt; endl &lt;&lt; &quot;_____&quot; &lt;&lt; endl;

    Sort sort;
    sort.order_.push_back(pair&lt;string, bool&gt;(&quot;m1&quot;, true));
    sort.order_.push_back(pair&lt;string, bool&gt;(&quot;m2&quot;, false));
    dc.sort(&amp;sort);

    PrintCollection(&quot;Sorted data:&quot;, dc);
}

int main()
{
    DataCollection dc;

    dc.push_back(DataObject(&quot;A&quot;, &quot;A&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;A&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;A&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;B&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;B&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;C&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;C&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;C&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;A&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;A&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;A&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;B&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;B&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;B&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;C&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;C&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;C&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;A&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;A&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;A&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;B&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;B&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;B&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;C&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;C&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;C&quot;, &quot;C&quot;));

    random_shuffle(dc.begin(), dc.end());
    PrintCollection(&quot;Initial data:&quot;, dc);
    Test(dc);

    return 0;
}
</code></pre>
<p>Führe ich das Testprogramm nun aus erhalte ich folgende ausgabe:</p>
<p>Initial data:<br />
A B B<br />
B A B<br />
B A C<br />
B C A<br />
C C A<br />
B C B<br />
B C C<br />
A A B<br />
C C C<br />
B A A<br />
A B A<br />
C B B<br />
C A B<br />
A A C<br />
A A A<br />
C B C<br />
C C B<br />
C A A<br />
B B B<br />
A C C<br />
A B C<br />
C B A<br />
A C B<br />
B B A<br />
B B C<br />
C A C<br />
A C A</p>
<p>Test:<br />
____<br />
compare 'B A B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B A B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B A C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B A C' to 'B A B' using m1 (asc) m2 (desc)<br />
'B A C' is less or equal to 'B A B'<br />
compare 'B A C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C A' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C A' to 'B A B' using m1 (asc) m2 (desc)<br />
'B C A' is less or equal to 'B A B'<br />
compare 'B C A' to 'B A C' using m1 (asc) m2 (desc)<br />
'B C A' is less or equal to 'B A C'<br />
compare 'B C A' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'C C A' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'C C A' to 'B A B' using m1 (asc) m2 (desc)<br />
compare 'B C B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C B' to 'C C A' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'C C A'<br />
compare 'B C B' to 'B A B' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'B A B'<br />
compare 'B C B' to 'B A C' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'B A C'<br />
compare 'B C B' to 'B C A' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'B C A'<br />
compare 'B C B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C C' to 'C C A' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'C C A'<br />
compare 'B C C' to 'B A B' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B A B'<br />
compare 'B C C' to 'B A C' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B A C'<br />
compare 'B C C' to 'B C A' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B C A'<br />
compare 'B C C' to 'B C B' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B C B'<br />
compare 'B C C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'A A B' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'A A B' using m1 (asc) m2 (desc)<br />
compare 'B A A' to 'A A B' using m1 (asc) m2 (desc)<br />
compare 'B A A' to 'C C C' using m1 (asc) m2 (desc)<br />
compare 'A B A' to 'A A B' using m1 (asc) m2 (desc)<br />
'A B A' is less or equal to 'A A B'<br />
compare 'C B B' to 'A B A' using m1 (asc) m2 (desc)<br />
compare 'C B B' to 'B A A' using m1 (asc) m2 (desc)<br />
compare 'C A B' to 'A B A' using m1 (asc) m2 (desc)<br />
compare 'C A B' to 'C B B' using m1 (asc) m2 (desc)<br />
compare 'A A C' to 'A B A' using m1 (asc) m2 (desc)<br />
compare 'A A C' to 'C A B' using m1 (asc) m2 (desc)<br />
'A A C' is less or equal to 'C A B'<br />
compare 'A A C' to 'C B B' using m1 (asc) m2 (desc)<br />
compare 'A B A' to 'A B B' using m1 (asc) m2 (desc)<br />
'A B A' is less or equal to 'A B B'<br />
compare 'A A B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B C C' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B C B' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B C A' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B A C' using m1 (asc) m2 (desc)<br />
'A A B' is less or equal to 'B A C'<br />
compare 'C C C' to 'B A C' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'B A B' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'C C A' using m1 (asc) m2 (desc)<br />
'C C C' is less or equal to 'C C A'<br />
compare 'B A A' to 'C C A' using m1 (asc) m2 (desc)<br />
compare 'C B C' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C B C' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C C B' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C C B' to 'C B C' using m1 (asc) m2 (desc)<br />
'C C B' is less or equal to 'C B C'<br />
compare 'C C B' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C A A' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C A A' to 'C B C' using m1 (asc) m2 (desc)<br />
compare 'B B B' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'B B B' to 'C A A' using m1 (asc) m2 (desc)<br />
'B B B' is less or equal to 'C A A'<br />
compare 'B B B' to 'C B C' using m1 (asc) m2 (desc)<br />
'B B B' is less or equal to 'C B C'<br />
compare 'B B B' to 'C C B' using m1 (asc) m2 (desc)<br />
compare 'A C C' to 'A A A' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'A A A'<br />
compare 'A B C' to 'A C C' using m1 (asc) m2 (desc)<br />
compare 'A B C' to 'C A A' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'C A A'<br />
compare 'A B C' to 'C B C' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'C B C'<br />
compare 'A B C' to 'B B B' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'B B B'<br />
compare 'A B C' to 'C C B' using m1 (asc) m2 (desc)<br />
compare 'A C B' to 'C B A' using m1 (asc) m2 (desc)<br />
'A C B' is less or equal to 'C B A'<br />
compare 'B B A' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'B B A' to 'C B A' using m1 (asc) m2 (desc)<br />
'B B A' is less or equal to 'C B A'<br />
compare 'B B A' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'C B A' using m1 (asc) m2 (desc)<br />
'B B C' is less or equal to 'C B A'<br />
compare 'B B C' to 'B B A' using m1 (asc) m2 (desc)<br />
'B B C' is less or equal to 'B B A'<br />
compare 'B B C' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'C B A' using m1 (asc) m2 (desc)<br />
compare 'A C A' to 'A C B' using m1 (asc) m2 (desc)<br />
'A C A' is less or equal to 'A C B'<br />
compare 'A C A' to 'A C C' using m1 (asc) m2 (desc)<br />
'A C A' is less or equal to 'A C C'<br />
compare 'A C B' to 'A C C' using m1 (asc) m2 (desc)<br />
'A C B' is less or equal to 'A C C'<br />
compare 'B B C' to 'A C C' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'C C B' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A B C' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'B B B' using m1 (asc) m2 (desc)<br />
'B B C' is less or equal to 'B B B'<br />
compare 'B B A' to 'B B B' using m1 (asc) m2 (desc)<br />
'B B A' is less or equal to 'B B B'<br />
compare 'C B A' to 'B B B' using m1 (asc) m2 (desc)<br />
compare 'C B A' to 'C B C' using m1 (asc) m2 (desc)<br />
'C B A' is less or equal to 'C B C'<br />
compare 'C A C' to 'C B C' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'C A A' using m1 (asc) m2 (desc)<br />
'C A C' is less or equal to 'C A A'<br />
compare 'C A A' to 'C A B' using m1 (asc) m2 (desc)<br />
'C A A' is less or equal to 'C A B'<br />
compare 'C A A' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'C B C' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'C B A' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'B B B' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'B B A' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'A B C' to 'A A C' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'A A C'<br />
compare 'A B C' to 'C B B' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'C B B'<br />
compare 'A B C' to 'B A A' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'B A A'<br />
compare 'A B C' to 'C C A' using m1 (asc) m2 (desc)<br />
compare 'C C B' to 'C C A' using m1 (asc) m2 (desc)<br />
'C C B' is less or equal to 'C C A'<br />
compare 'C C B' to 'C C C' using m1 (asc) m2 (desc)<br />
'C C B' is less or equal to 'C C C'<br />
compare 'C C B' to 'B A B' using m1 (asc) m2 (desc)<br />
compare 'A A A' to 'B A B' using m1 (asc) m2 (desc)<br />
'A A A' is less or equal to 'B A B'<br />
compare 'A A A' to 'B A C' using m1 (asc) m2 (desc)<br />
'A A A' is less or equal to 'B A C'<br />
compare 'A A A' to 'A A B' using m1 (asc) m2 (desc)<br />
'A A A' is less or equal to 'A A B'<br />
compare 'A A A' to 'B C A' using m1 (asc) m2 (desc)<br />
compare 'A C C' to 'B C A' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'B C A'<br />
compare 'A C C' to 'B C B' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'B C B'<br />
compare 'A C C' to 'B C C' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'B C C'<br />
compare 'A C C' to 'A B B' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'A B B'<br />
compare 'A C C' to 'A B A' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'A B A'</p>
<p>Sorted data:<br />
A C A<br />
A C B<br />
A C C<br />
A B A<br />
A B B<br />
B C C<br />
B C B<br />
B C A<br />
A A A<br />
A A B<br />
B A C<br />
B A B<br />
C C B<br />
C C C<br />
C C A<br />
A B C<br />
B A A<br />
C B B<br />
A A C<br />
B B C<br />
B B A<br />
B B B<br />
C B A<br />
C B C<br />
C A C<br />
C A A<br />
C A B</p>
<p>==&gt; die Sortierung funktioniert so überhaupt nicht!<br />
Hat irgend jemand eine Idee warum es so nicht funktioniert und wie es funktionieren könnte?<br />
Habe schon mehrere Varianten ausprobiert, habe aber immer eine unsortierte Tabelle erhalten!</p>
<p>Bin für jede Anregung dankbar!</p>
<p>Lg<br />
orsox</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199708/sortieren-einer-datenstruktur-mit-mehreren-sortier-kriterien</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 19:18:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199708.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Dec 2007 10:47:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 10:47:07 GMT]]></title><description><![CDATA[<p>hallo!<br />
Ich habe ein kleines Problem!<br />
Ich habe eine Tabelle (vector) von Daten-Objekten die ich anhand mehrerer Sortier-Kriterien mit der STL stable_sort-Methode sortieren möchte.</p>
<p>Ich habe dazu mal folgendes gemacht:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
using namespace std;

// ausgabe der aktuellen vergleichsoperation
void printCompare(const DataObject&amp; next, const DataObject&amp; current, Sort* sort)
{
    cout &lt;&lt; &quot;compare '&quot;;
    next.print();
    cout &lt;&lt; &quot;' to '&quot;;
    current.print();
    cout &lt;&lt; &quot;'&quot;;
    if( sort != NULL &amp;&amp; !sort-&gt;order_.empty() )
    {
        cout &lt;&lt; &quot; using &quot;;
        for( vector&lt;pair&lt;string, bool&gt; &gt;::iterator it = sort-&gt;order_.begin(); it != sort-&gt;order_.end(); it++ )
            cout &lt;&lt; (*it).first &lt;&lt; &quot; &quot; &lt;&lt; ((*it).second ? &quot;(asc)&quot; : &quot;(desc)&quot;) &lt;&lt; &quot; &quot;;
    }
    cout &lt;&lt; endl;
}

void printIsLess(const DataObject&amp; next, const DataObject&amp; current)
{
    cout &lt;&lt; &quot;'&quot;;
    next.print();
    cout &lt;&lt; &quot;' is less or equal to '&quot;;
    current.print();
    cout &lt;&lt; &quot;'&quot; &lt;&lt; endl;
}

class DataObject
{
    public:
        DataObject(const string&amp; m1, const string&amp; m2, const string&amp; m3) : m1_(m1), m2_(m2), m3_(m3) {}
        ~DataObject() {}

        const string&amp; m1() const { return m1_; }
        void m1(const string&amp; m1) { m1_ = m1; }

        const string&amp; m2() const { return m2_; }
        void m2(const string&amp; m2) { m2_ = m2; }

        const string&amp; m3() const { return m3_; }
        void m3(const string&amp; m3) { m3_ = m3; }

    public:
        void print() const { cout &lt;&lt; m1_ &lt;&lt; &quot; &quot; &lt;&lt; m2_ &lt;&lt; &quot; &quot; &lt;&lt; m3_; }

    private:
        string m1_;
        string m2_;
        string m3_;
};

class DataCollection : public vector&lt;DataObject&gt;
{
    public:
        DataCollection() {}
        virtual ~DataCollection() {}

    public:
        void sort(Sort* sort)
        {
            if( sort != NULL &amp;&amp; !sort-&gt;order_.empty() )
            {
                DataSort ds(sort);
                std::stable_sort(begin(), end(), ds);
            }
        }

    public:
        void print() const
        {
            for( const_iterator it=begin(); it!=end(); it++ )
            {
                (*it).print();
                cout &lt;&lt; endl;
            }
        }
};

// hier sind die kriterien hinterlegt
class Sort
{
    public:
        Sort() {}
        virtual ~Sort() {}

    public:
        bool valid() const { return !order_.empty(); }

    public:
        vector&lt;pair&lt;string, bool&gt; &gt; order_;
};

// hier die sortier-methode
class DataSort
{
    public:
        DataSort(Sort* sort=NULL) { sort_ = sort; }
        virtual ~DataSort() {}

    public:
        bool operator()(const DataObject&amp; d1, const DataObject&amp; d2)
        {
            if( sort_ != NULL &amp;&amp; !sort_-&gt;order_.empty() )
            {
                printCompare(next, current, sort_);

                for( vector&lt;pair&lt;string, bool&gt; &gt;::iterator it = sort_-&gt;order_.begin(); it != sort_-&gt;order_.end(); it++ )
                {
                    if( strcasecmp((*it).first.c_str(), &quot;m1&quot;) == 0 )
                    {
                        if( (*it).second &amp;&amp; next.m1() &gt; current.m1() )
                            return false;
                        else if( !(*it).second &amp;&amp; next.m1() &lt; current.m1() )
                            return false;
                    }
                    else if( strcasecmp((*it).first.c_str(), &quot;m2&quot;) == 0 )
                    {
                        if( (*it).second &amp;&amp; next.m2() &gt; current.m2() )
                            return false;
                        else if( !(*it).second &amp;&amp; next.m2() &lt; current.m2() )
                            return false;
                    }
                    else if( strcasecmp((*it).first.c_str(), &quot;m3&quot;) == 0 )
                    {
                        if( (*it).second &amp;&amp; next.m3() &gt; current.m3() )
                            return false;
                        else if( !(*it).second &amp;&amp; next.m3() &lt; current.m3() )
                            return false;
                    }
                }

                printIsLess(next, current);
                return true;
            }

            return false;
        }

    private:
        Sort* sort_;
};

void PrintCollection(const string&amp; msg, const DataCollection&amp; dc)
{
    cout &lt;&lt; msg &lt;&lt; endl;
    dc.print();
    cout &lt;&lt; endl;
}

void Test(DataCollection&amp; dc)
{
    // sortiere nach m1 aufsteigend und m2 absteigend
    cout &lt;&lt; &quot;Test:&quot; &lt;&lt; endl &lt;&lt; &quot;_____&quot; &lt;&lt; endl;

    Sort sort;
    sort.order_.push_back(pair&lt;string, bool&gt;(&quot;m1&quot;, true));
    sort.order_.push_back(pair&lt;string, bool&gt;(&quot;m2&quot;, false));
    dc.sort(&amp;sort);

    PrintCollection(&quot;Sorted data:&quot;, dc);
}

int main()
{
    DataCollection dc;

    dc.push_back(DataObject(&quot;A&quot;, &quot;A&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;A&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;A&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;B&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;B&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;C&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;C&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;A&quot;, &quot;C&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;A&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;A&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;A&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;B&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;B&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;B&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;C&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;C&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;B&quot;, &quot;C&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;A&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;A&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;A&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;B&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;B&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;B&quot;, &quot;C&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;C&quot;, &quot;A&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;C&quot;, &quot;B&quot;));
    dc.push_back(DataObject(&quot;C&quot;, &quot;C&quot;, &quot;C&quot;));

    random_shuffle(dc.begin(), dc.end());
    PrintCollection(&quot;Initial data:&quot;, dc);
    Test(dc);

    return 0;
}
</code></pre>
<p>Führe ich das Testprogramm nun aus erhalte ich folgende ausgabe:</p>
<p>Initial data:<br />
A B B<br />
B A B<br />
B A C<br />
B C A<br />
C C A<br />
B C B<br />
B C C<br />
A A B<br />
C C C<br />
B A A<br />
A B A<br />
C B B<br />
C A B<br />
A A C<br />
A A A<br />
C B C<br />
C C B<br />
C A A<br />
B B B<br />
A C C<br />
A B C<br />
C B A<br />
A C B<br />
B B A<br />
B B C<br />
C A C<br />
A C A</p>
<p>Test:<br />
____<br />
compare 'B A B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B A B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B A C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B A C' to 'B A B' using m1 (asc) m2 (desc)<br />
'B A C' is less or equal to 'B A B'<br />
compare 'B A C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C A' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C A' to 'B A B' using m1 (asc) m2 (desc)<br />
'B C A' is less or equal to 'B A B'<br />
compare 'B C A' to 'B A C' using m1 (asc) m2 (desc)<br />
'B C A' is less or equal to 'B A C'<br />
compare 'B C A' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'C C A' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'C C A' to 'B A B' using m1 (asc) m2 (desc)<br />
compare 'B C B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C B' to 'C C A' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'C C A'<br />
compare 'B C B' to 'B A B' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'B A B'<br />
compare 'B C B' to 'B A C' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'B A C'<br />
compare 'B C B' to 'B C A' using m1 (asc) m2 (desc)<br />
'B C B' is less or equal to 'B C A'<br />
compare 'B C B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'B C C' to 'C C A' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'C C A'<br />
compare 'B C C' to 'B A B' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B A B'<br />
compare 'B C C' to 'B A C' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B A C'<br />
compare 'B C C' to 'B C A' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B C A'<br />
compare 'B C C' to 'B C B' using m1 (asc) m2 (desc)<br />
'B C C' is less or equal to 'B C B'<br />
compare 'B C C' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'A A B' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'A A B' using m1 (asc) m2 (desc)<br />
compare 'B A A' to 'A A B' using m1 (asc) m2 (desc)<br />
compare 'B A A' to 'C C C' using m1 (asc) m2 (desc)<br />
compare 'A B A' to 'A A B' using m1 (asc) m2 (desc)<br />
'A B A' is less or equal to 'A A B'<br />
compare 'C B B' to 'A B A' using m1 (asc) m2 (desc)<br />
compare 'C B B' to 'B A A' using m1 (asc) m2 (desc)<br />
compare 'C A B' to 'A B A' using m1 (asc) m2 (desc)<br />
compare 'C A B' to 'C B B' using m1 (asc) m2 (desc)<br />
compare 'A A C' to 'A B A' using m1 (asc) m2 (desc)<br />
compare 'A A C' to 'C A B' using m1 (asc) m2 (desc)<br />
'A A C' is less or equal to 'C A B'<br />
compare 'A A C' to 'C B B' using m1 (asc) m2 (desc)<br />
compare 'A B A' to 'A B B' using m1 (asc) m2 (desc)<br />
'A B A' is less or equal to 'A B B'<br />
compare 'A A B' to 'A B B' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B C C' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B C B' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B C A' using m1 (asc) m2 (desc)<br />
compare 'A A B' to 'B A C' using m1 (asc) m2 (desc)<br />
'A A B' is less or equal to 'B A C'<br />
compare 'C C C' to 'B A C' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'B A B' using m1 (asc) m2 (desc)<br />
compare 'C C C' to 'C C A' using m1 (asc) m2 (desc)<br />
'C C C' is less or equal to 'C C A'<br />
compare 'B A A' to 'C C A' using m1 (asc) m2 (desc)<br />
compare 'C B C' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C B C' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C C B' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C C B' to 'C B C' using m1 (asc) m2 (desc)<br />
'C C B' is less or equal to 'C B C'<br />
compare 'C C B' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C A A' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'C A A' to 'C B C' using m1 (asc) m2 (desc)<br />
compare 'B B B' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'B B B' to 'C A A' using m1 (asc) m2 (desc)<br />
'B B B' is less or equal to 'C A A'<br />
compare 'B B B' to 'C B C' using m1 (asc) m2 (desc)<br />
'B B B' is less or equal to 'C B C'<br />
compare 'B B B' to 'C C B' using m1 (asc) m2 (desc)<br />
compare 'A C C' to 'A A A' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'A A A'<br />
compare 'A B C' to 'A C C' using m1 (asc) m2 (desc)<br />
compare 'A B C' to 'C A A' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'C A A'<br />
compare 'A B C' to 'C B C' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'C B C'<br />
compare 'A B C' to 'B B B' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'B B B'<br />
compare 'A B C' to 'C C B' using m1 (asc) m2 (desc)<br />
compare 'A C B' to 'C B A' using m1 (asc) m2 (desc)<br />
'A C B' is less or equal to 'C B A'<br />
compare 'B B A' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'B B A' to 'C B A' using m1 (asc) m2 (desc)<br />
'B B A' is less or equal to 'C B A'<br />
compare 'B B A' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'C B A' using m1 (asc) m2 (desc)<br />
'B B C' is less or equal to 'C B A'<br />
compare 'B B C' to 'B B A' using m1 (asc) m2 (desc)<br />
'B B C' is less or equal to 'B B A'<br />
compare 'B B C' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'A C B' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'C B A' using m1 (asc) m2 (desc)<br />
compare 'A C A' to 'A C B' using m1 (asc) m2 (desc)<br />
'A C A' is less or equal to 'A C B'<br />
compare 'A C A' to 'A C C' using m1 (asc) m2 (desc)<br />
'A C A' is less or equal to 'A C C'<br />
compare 'A C B' to 'A C C' using m1 (asc) m2 (desc)<br />
'A C B' is less or equal to 'A C C'<br />
compare 'B B C' to 'A C C' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A A A' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'C C B' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A B C' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'B B B' using m1 (asc) m2 (desc)<br />
'B B C' is less or equal to 'B B B'<br />
compare 'B B A' to 'B B B' using m1 (asc) m2 (desc)<br />
'B B A' is less or equal to 'B B B'<br />
compare 'C B A' to 'B B B' using m1 (asc) m2 (desc)<br />
compare 'C B A' to 'C B C' using m1 (asc) m2 (desc)<br />
'C B A' is less or equal to 'C B C'<br />
compare 'C A C' to 'C B C' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'C A A' using m1 (asc) m2 (desc)<br />
'C A C' is less or equal to 'C A A'<br />
compare 'C A A' to 'C A B' using m1 (asc) m2 (desc)<br />
'C A A' is less or equal to 'C A B'<br />
compare 'C A A' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'C A C' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'C B C' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'C B A' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'B B B' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'B B A' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'B B C' to 'A A C' using m1 (asc) m2 (desc)<br />
compare 'A B C' to 'A A C' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'A A C'<br />
compare 'A B C' to 'C B B' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'C B B'<br />
compare 'A B C' to 'B A A' using m1 (asc) m2 (desc)<br />
'A B C' is less or equal to 'B A A'<br />
compare 'A B C' to 'C C A' using m1 (asc) m2 (desc)<br />
compare 'C C B' to 'C C A' using m1 (asc) m2 (desc)<br />
'C C B' is less or equal to 'C C A'<br />
compare 'C C B' to 'C C C' using m1 (asc) m2 (desc)<br />
'C C B' is less or equal to 'C C C'<br />
compare 'C C B' to 'B A B' using m1 (asc) m2 (desc)<br />
compare 'A A A' to 'B A B' using m1 (asc) m2 (desc)<br />
'A A A' is less or equal to 'B A B'<br />
compare 'A A A' to 'B A C' using m1 (asc) m2 (desc)<br />
'A A A' is less or equal to 'B A C'<br />
compare 'A A A' to 'A A B' using m1 (asc) m2 (desc)<br />
'A A A' is less or equal to 'A A B'<br />
compare 'A A A' to 'B C A' using m1 (asc) m2 (desc)<br />
compare 'A C C' to 'B C A' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'B C A'<br />
compare 'A C C' to 'B C B' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'B C B'<br />
compare 'A C C' to 'B C C' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'B C C'<br />
compare 'A C C' to 'A B B' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'A B B'<br />
compare 'A C C' to 'A B A' using m1 (asc) m2 (desc)<br />
'A C C' is less or equal to 'A B A'</p>
<p>Sorted data:<br />
A C A<br />
A C B<br />
A C C<br />
A B A<br />
A B B<br />
B C C<br />
B C B<br />
B C A<br />
A A A<br />
A A B<br />
B A C<br />
B A B<br />
C C B<br />
C C C<br />
C C A<br />
A B C<br />
B A A<br />
C B B<br />
A A C<br />
B B C<br />
B B A<br />
B B B<br />
C B A<br />
C B C<br />
C A C<br />
C A A<br />
C A B</p>
<p>==&gt; die Sortierung funktioniert so überhaupt nicht!<br />
Hat irgend jemand eine Idee warum es so nicht funktioniert und wie es funktionieren könnte?<br />
Habe schon mehrere Varianten ausprobiert, habe aber immer eine unsortierte Tabelle erhalten!</p>
<p>Bin für jede Anregung dankbar!</p>
<p>Lg<br />
orsox</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415727</guid><dc:creator><![CDATA[orsox]]></dc:creator><pubDate>Thu, 06 Dec 2007 10:47:07 GMT</pubDate></item><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 10:54:37 GMT]]></title><description><![CDATA[<p>sort() erwartet keine &lt;= Beziehung, sondern eine &lt; Beziehung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415731</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 06 Dec 2007 10:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 12:16:07 GMT]]></title><description><![CDATA[<p>stable_sort aber schon, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415780</guid><dc:creator><![CDATA[orsox]]></dc:creator><pubDate>Thu, 06 Dec 2007 12:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 12:18:40 GMT]]></title><description><![CDATA[<p>Nein - so weit ist die STL schon konsistent, daß alles, was mit Sortieren (sort(), stable_sort(), lower_bound() und Familie, set&lt;&gt;/map&lt;&gt;,...) zu tun hat, die selben Randbedingungen setzt - sie erwarten eine &lt; Beziehung als Vergleichskriterium.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415783</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 06 Dec 2007 12:18:40 GMT</pubDate></item><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 12:26:16 GMT]]></title><description><![CDATA[<p>dh. wenn ich die operatoren in der sort-methode dementsprechend anpasse (statt &gt; dann &gt;= und statt &lt; dann &lt;=) sollte es dann funktinieren!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415789</guid><dc:creator><![CDATA[orsox]]></dc:creator><pubDate>Thu, 06 Dec 2007 12:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 16:07:52 GMT]]></title><description><![CDATA[<p><a href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html" rel="nofollow">http://www.sgi.com/tech/stl/StrictWeakOrdering.html</a><br />
<a href="http://en.wikipedia.org/wiki/Strict_weak_ordering" rel="nofollow">http://en.wikipedia.org/wiki/Strict_weak_ordering</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1415977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1415977</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 06 Dec 2007 16:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to sortieren einer datenstruktur mit mehreren sortier-kriterien on Thu, 06 Dec 2007 21:52:54 GMT]]></title><description><![CDATA[<p>Danke erstmal für die Anregungen.</p>
<p>Damit ich das jetzt richtig verstehe...</p>
<p>- sort bzw. stable_sort ruft cmp( *(it+1), *it ) auf<br />
- wenn *(it+1) &lt; *it ist, muss ich true, ansonsten false zurückliefern</p>
<p>das hieße dann aber wiederum daß die in meinem Beispiel verwendete Logik funktionieren müsste, oder steh ich jetzt komplett auf'm schlauch? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>wenn ich mehrere sortier-kriterien betrachten muss, dann kann ich doch erst true zurückliefern, wenn keine bedingung ( *(it+1) &gt; *it (für das jeweilige kriterium und somit member) ) erfüllt ist!? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416200</guid><dc:creator><![CDATA[orsox]]></dc:creator><pubDate>Thu, 06 Dec 2007 21:52:54 GMT</pubDate></item></channel></rss>