<?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[Vergleichsfunktion bei set, die zweite]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein String-Set mit eigener Vergleichsfunktion, in dieses Set sollen spezielle String (siehe Kommentar im Source), der Vergleich soll aber nicht nach dem ganzen String erfolgen, sondern nur nach dem ersten Teil.</p>
<pre><code class="language-cpp">// Die Strings sehen so aus:
// &quot;03423789;AUFTRAG;undosweiter....&quot;
// &quot;034;MAHNUNG;undsoweiter....&quot;
// &quot;034;AUFTRAG;undsoweiter....&quot;
// und sortiert werden soll nach der Nummer vor dem ersten Semikolon

class comp : public binary_function&lt;bool, string, string&gt;
{
public:
    bool operator()(const string&amp; left,const string&amp; right) const
    {
      string s1 = strtok((char *)left.c_str(), &quot;;&quot;);
      string s2 = strtok((char *)right.c_str(), &quot;;&quot;);
      return s1 &lt; s2;
    }
};

set&lt;string, comp &gt; ss;
</code></pre>
<p>Das funktioniert zwar, nur das jetzt eigentlich unterschiedliche Strings, wie der zweite und dritte im Source oben als gleich behandlet werden, und demzufolge der letzte nicht mehr eingefügt wird.<br />
Was kann man da tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124116/vergleichsfunktion-bei-set-die-zweite</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 20:16:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124116.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Oct 2005 06:45:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vergleichsfunktion bei set, die zweite on Mon, 24 Oct 2005 06:45:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab ein String-Set mit eigener Vergleichsfunktion, in dieses Set sollen spezielle String (siehe Kommentar im Source), der Vergleich soll aber nicht nach dem ganzen String erfolgen, sondern nur nach dem ersten Teil.</p>
<pre><code class="language-cpp">// Die Strings sehen so aus:
// &quot;03423789;AUFTRAG;undosweiter....&quot;
// &quot;034;MAHNUNG;undsoweiter....&quot;
// &quot;034;AUFTRAG;undsoweiter....&quot;
// und sortiert werden soll nach der Nummer vor dem ersten Semikolon

class comp : public binary_function&lt;bool, string, string&gt;
{
public:
    bool operator()(const string&amp; left,const string&amp; right) const
    {
      string s1 = strtok((char *)left.c_str(), &quot;;&quot;);
      string s2 = strtok((char *)right.c_str(), &quot;;&quot;);
      return s1 &lt; s2;
    }
};

set&lt;string, comp &gt; ss;
</code></pre>
<p>Das funktioniert zwar, nur das jetzt eigentlich unterschiedliche Strings, wie der zweite und dritte im Source oben als gleich behandlet werden, und demzufolge der letzte nicht mehr eingefügt wird.<br />
Was kann man da tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899735</guid><dc:creator><![CDATA[Postman]]></dc:creator><pubDate>Mon, 24 Oct 2005 06:45:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion bei set, die zweite on Mon, 24 Oct 2005 06:51:30 GMT]]></title><description><![CDATA[<p>Ok, ich schieb es drauf, das es Montag morgen ist und mein Hirn noch Wochenende tut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">class comp : public binary_function&lt;bool, string, string&gt;
{
public:
    bool operator()(const string&amp; left,const string&amp; right) const
    {
      string s1 = strtok((char *)left.c_str(), &quot;;&quot;);
      string s2 = strtok((char *)right.c_str(), &quot;;&quot;);
      if(s1 == s2)
        return (left &lt; right);
      return s1 &lt; s2;
    }
};
</code></pre>
<p>und schon tut er, was er soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/899740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899740</guid><dc:creator><![CDATA[Postman]]></dc:creator><pubDate>Mon, 24 Oct 2005 06:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion bei set, die zweite on Mon, 24 Oct 2005 06:55:36 GMT]]></title><description><![CDATA[<p><a href="http://man.cx/strtok" rel="nofollow">man: strtok</a> ersetzt das gefundene Trennzeichen durch '\0' und liefert einen Pointer auf das erste Zeichen dahinter. Aber wie der mit string::c_str() zusammenarbeitet, ist die andere Frage - da solltest du besser die string-eigenen Methoden verwenden (find() und substr()).</p>
<p>PS: Und ein Cast von const char* nach char* ist sowieso gefährlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899745</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 24 Oct 2005 06:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion bei set, die zweite on Mon, 24 Oct 2005 06:56:27 GMT]]></title><description><![CDATA[<p>Postman schrieb:</p>
<blockquote>
<p>strtok((char *)left.c_str(), &quot;;&quot;);</p>
</blockquote>
<p>Aua, aua. Meinst du nicht, dass einen Sinn hat, dass c_str <strong>const</strong> zurückgibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/899746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899746</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 24 Oct 2005 06:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vergleichsfunktion bei set, die zweite on Mon, 24 Oct 2005 08:14:59 GMT]]></title><description><![CDATA[<p>Postman schrieb:</p>
<blockquote>
<p>Ok, ich schieb es drauf, das es Montag morgen ist und mein Hirn noch Wochenende tut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">class comp : public binary_function&lt;bool, string, string&gt;
{
public:
    bool operator()(const string&amp; left,const string&amp; right) const
    {
      string s1 = strtok((char *)left.c_str(), &quot;;&quot;);
      string s2 = strtok((char *)right.c_str(), &quot;;&quot;);
      if(s1 == s2)
        return (left &lt; right);
      return s1 &lt; s2;
    }
};
</code></pre>
<p>und schon tut er, was er soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Da bleibt aber von Deinem Substringvergleich nichts mehr übrig. Wenn die Zeichen bis zum 1. Semikolon gleich sind, dann vergleiche den ganzen String. Ansonsten vergleiche den Teil bis zum Semikolon. Das geht einfacher mit:</p>
<pre><code>bool operator()(const string&amp; left,const string&amp; right) const
    {
      return left &lt; right;
    }
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/899808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/899808</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Mon, 24 Oct 2005 08:14:59 GMT</pubDate></item></channel></rss>