<?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[Set aus String-Elementen bei C++]]></title><description><![CDATA[<p>Servus,</p>
<p>ich will ein Set aus strings anlegen - wie macht man das in C++ und wie definiert c++ den Unterschied zwischen Objekt- und Wertgleichheit?</p>
<p>Danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280392/set-aus-string-elementen-bei-c</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 00:21:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280392.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Jan 2011 19:14:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Fri, 14 Jan 2011 19:14:38 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich will ein Set aus strings anlegen - wie macht man das in C++ und wie definiert c++ den Unterschied zwischen Objekt- und Wertgleichheit?</p>
<p>Danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006681</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Fri, 14 Jan 2011 19:26:00 GMT]]></title><description><![CDATA[<p>brauchst du wirklich ein lmgtfy.com-link dafür? Google &quot;c++ std::set&quot; nimm was wo c++reference drin steht und lies .... ::kopfschüttel::</p>
<p>Falls du std::set noch nicht kanntest, sorry. Dann google am besten gleich noch &quot;standard template library c++&quot; bzw &quot;STL c++&quot; und schmöker da ein bisschen rum, das lohnt sich.</p>
<p>Was die Objekt und Wertgleichheit angeht ... bei String sind werden Werte (voreingestellt, aber änderbar) meist lexigrafisch gechecket. Objektgleichheit geht zB so:</p>
<pre><code class="language-cpp">#include &lt;string&gt;

std::string a = &quot;eins&quot;;
std::string b = &quot;auch eins&quot;;
std::string c = &quot;eins&quot;;
std::string &amp; d = a;
bool gleicherTextAB = a == b;
bool gleicherTextAC = a == c;
bool gleichesObjektAB = &amp;a == &amp;b;
bool gleichesObjektAD = &amp;a == &amp;d;
// ausgaben darfst du selbst machen
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2006685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006685</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Fri, 14 Jan 2011 19:28:42 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<p>ich will ein Set aus strings anlegen - wie macht man das in C++</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;set&gt;
#include &lt;string&gt;
using namespace std;
int main ()
{
 set&lt;string&gt; s;
 return 0;
}
</code></pre>
<p>Jay1980 schrieb:</p>
<blockquote>
<p>wie definiert c++ den Unterschied zwischen Objekt- und Wertgleichheit?</p>
</blockquote>
<p>Wertgleichzeit kannst du mit == überprüfen. Den Operator kannst du natürlich auch überladen.<br />
Falls du mit Objektgleichzeit meinst, dass Zeiger auf das gleiche Objekt im Speicher zeigen, kannst du das überprüfen, indem du die Adressen der Objekte vergleichst.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
int main ()
{
 int i(0);
 int j(0);
 int* p1(&amp;i);
 int* p2(&amp;i);
 if (i==j)
  cout &lt;&lt; &quot;1) gleicher Wert&quot; &lt;&lt; endl;
 if (&amp;i==&amp;j)
  cout &lt;&lt; &quot;2) gleiche Adresse&quot; &lt;&lt; endl;
 if (p1==p2)
  cout &lt;&lt; &quot;3) gleiche Adresse&quot; &lt;&lt; endl;
 return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>1) gleicher Wert
3) gleiche Adresse
</code></pre>
<p>Edit: Mist, war zu lahm. <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/2006689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006689</guid><dc:creator><![CDATA[Dobias]]></dc:creator><pubDate>Fri, 14 Jan 2011 19:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Sat, 15 Jan 2011 00:13:55 GMT]]></title><description><![CDATA[<blockquote>
<p>lexigrafisch</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/Lexikographische_Ordnung" rel="nofollow">http://de.wikipedia.org/wiki/Lexikographische_Ordnung</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006772</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Sat, 15 Jan 2011 00:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Sat, 15 Jan 2011 01:01:59 GMT]]></title><description><![CDATA[<p>Danke, es hat geklappt, ich schau schon oft bei Google vorher, aber oft bleib ich dann hängen wie gerade: ich schaffe es nicht ein string-set via Iterator abzulaufen, wie macht ihr das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006776</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 15 Jan 2011 01:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Sat, 15 Jan 2011 02:20:52 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<p>Danke, es hat geklappt, ich schau schon oft bei Google vorher, aber oft bleib ich dann hängen wie gerade: ich schaffe es nicht ein string-set via Iterator abzulaufen, wie macht ihr das?</p>
</blockquote>
<p>Genauso wie bei allen anderen STL-Containern auch. Zeig mal was du gemacht hast. Ich kann mir nämlich nicht vorstellen, wie man dies nicht schaffen kann, wenn man auch nur irgendwelche Initiative zeigt. Das ganze klingt doch zu sehr nach Hausaufgabe und du nach faulem Schüler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006781</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 15 Jan 2011 02:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Sat, 15 Jan 2011 13:28:55 GMT]]></title><description><![CDATA[<p>Kann sein, dass das so ankommt, ist aber nicht so. Dein entscheidender Tipp war aber, dass es so geht wie bei allen Containern ... wie auch schon oben ... ich kannte das Set nicht und ich wusste nicht, dass Iteratoren für alle Container sehr ähnlich sind. Die Tutorials die ich zum anderen Iterator-Container-Abwandern fand konnte ich leicht adaptieren - mit den Tutorials zu Sets hatte ich Probleme.</p>
<p>Das ist nun mein Code:</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Iterator:\n&quot;;
    set&lt;string&gt;::iterator iteratorObject;
    for ( iteratorObject = filteredSeqSet.begin(); iteratorObject != filteredSeqSet.end(); iteratorObject++ )
    {
        cout &lt;&lt; *iteratorObject &lt;&lt; endl;
    }
    cout &lt;&lt; &quot; --- Iterator-Objekt ---\n&quot;;
</code></pre>
<p>In diesem Fall war es also schlicht ein Nichthinbekommen, oft kommt es aber auch anders vor, dass ich einige Wege zum Ziel finde und nicht einschätzen kann, was für meine Herangehensweise wohl das beste ist, das hatte ich beim Zahlen-String-konvertieren - da frage ich auch gern einfach: 'wie macht ihr das?'</p>
<p>Danke für den Tipp mit 'ist wie bei allen Containern'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006891</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 15 Jan 2011 13:28:55 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Sat, 15 Jan 2011 14:24:19 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>lexigrafisch</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/Lexikographische_Ordnung" rel="nofollow">http://de.wikipedia.org/wiki/Lexikographische_Ordnung</a></p>
</blockquote>
<p><a href="http://www.duden.de/definition/lexigrafisch" rel="nofollow">http://www.duden.de/definition/lexigrafisch</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ich finde finde das gerade das schöne an der STL und Iteratoren, kannst du eins, kannste (fast) alle ... bei dir würde auch ein const_iterator reichen <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/2006916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006916</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sat, 15 Jan 2011 14:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Thu, 20 Jan 2011 21:28:52 GMT]]></title><description><![CDATA[<p>Ui, mit Strings hat es ja noch geklappt, mit eigenen Strukturen pack ich das gerade nicht:</p>
<pre><code class="language-cpp">int i = 0;
    set&lt;singleColumnEntropySetItem&gt;::iterator it = g_singleEntropies.begin();
    while ( it != g_singleEntropies.end() )
    {
        cout &lt;&lt;  it-&gt;column &lt;&lt; &quot;; &quot; &lt;&lt; it-&gt;entropy &lt;&lt; &quot;; (&quot; &lt;&lt; i &lt;&lt; &quot;);\n&quot;;
        ++it;
        i++;
    }
</code></pre>
<p>Struktur:</p>
<pre><code class="language-cpp">struct singleColumnEntropySetItem {
    int column;
    double entropy;
};
</code></pre>
<p>Wie läuft man ein Set mit eigenen Strukturen ab?</p>
<p>Danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009549</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 20 Jan 2011 21:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Thu, 20 Jan 2011 21:41:30 GMT]]></title><description><![CDATA[<p>... wenn ich die Sache richtig einschätze, liegt es vor allem am fehlenden Vergleich ... mal schauen, wie man dem Set einen Comparator wie in Java mitgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009557</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Thu, 20 Jan 2011 21:41:30 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Thu, 20 Jan 2011 21:53:36 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<p>Ui, mit Strings hat es ja noch geklappt, mit eigenen Strukturen pack ich das gerade nicht</p>
</blockquote>
<p>Was passiert denn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009564</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 20 Jan 2011 21:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Thu, 20 Jan 2011 21:55:47 GMT]]></title><description><![CDATA[<p>Steht wie alles auch in der C++ Reference...</p>
<p><a href="http://www.cplusplus.com/reference/stl/set/key_comp/" rel="nofollow">http://www.cplusplus.com/reference/stl/set/key_comp/</a><br />
<a href="http://www.cplusplus.com/reference/stl/set/value_comp/" rel="nofollow">http://www.cplusplus.com/reference/stl/set/value_comp/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009565</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Thu, 20 Jan 2011 21:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Thu, 20 Jan 2011 23:16:01 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p><a href="http://www.duden.de/definition/lexigrafisch" rel="nofollow">http://www.duden.de/definition/lexigrafisch</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Verdammt ... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2009582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009582</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 20 Jan 2011 23:16:01 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Fri, 21 Jan 2011 00:08:10 GMT]]></title><description><![CDATA[<p>Schaffe es immer noch nicht und ja, ich weiß, dass es in der Referenz steht. Leider klappt es halt immer noch nicht, auch wenn ich mir die Referenz schon angesehen habe.</p>
<p>Ich kam schon etwas weiter, ich wollte die Variante nehmen, dass ich zum Vergleichen ein Funktionsobjekt mitgebe, wie es in diesem Thread beschrieben ist: <a href="http://www.c-plusplus.net/forum/269486" rel="nofollow">http://www.c-plusplus.net/forum/269486</a></p>
<p>Ich erhalte folgende Fehlermeldung:<br />
/usr/include/c++/4.4/bits/stl_function.h: In member function ‘bool std::less&lt;_Tp&gt;::operator()(const _Tp&amp;, const _Tp&amp;) const [with _Tp = singleColumnEntropySetItem]’:<br />
In file included from /usr/include/c++/4.4/string:50,<br />
/usr/include/c++/4.4/bits/stl_tree.h:1170: instantiated from ‘std::pair&lt;typename std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::iterator, bool&gt; std::_Rb_tree&lt;_Key, _Val, _KeyOfValue, _Compare, _Alloc&gt;::_M_insert_unique(const _Val&amp;) [with _Key = singleColumnEntropySetItem, _Val = singleColumnEntropySetItem, _KeyOfValue = std::_Identity&lt;singleColumnEntropySetItem&gt;, _Compare = std::less&lt;singleColumnEntropySetItem&gt;, _Alloc = std::allocator&lt;singleColumnEntropySetItem&gt;]’<br />
/usr/include/c++/4.4/bits/stl_set.h:411: instantiated from ‘std::pair&lt;typename std::_Rb_tree&lt;_Key, _Key, std::_Identity&lt;_Key&gt;, _Compare, typename _Alloc::rebind&lt;_Key&gt;::other&gt;::const_iterator, bool&gt; std::set&lt;_Key, _Compare, _Alloc&gt;::insert(const _Key&amp;) [with _Key = singleColumnEntropySetItem, _Compare = std::less&lt;singleColumnEntropySetItem&gt;, _Alloc = std::allocator&lt;singleColumnEntropySetItem&gt;]’<br />
h2r.cpp:465: instantiated from here<br />
/usr/include/c++/4.4/bits/stl_function.h:230: error: no match for ‘operator&lt;’ in ‘__x &lt; __y’<br />
make[2]: *** [build/Debug/GNU-Linux-x86/h2r.o] Fehler 1</p>
<p>So hier sind die Dateien:<br />
global.h</p>
<pre><code class="language-cpp">...
struct singleColumnEntropySetItemComparator {
    // siehe Breymann S. 761
    bool operator()(
        const singleColumnEntropySetItem&amp; lhs,
        const singleColumnEntropySetItem&amp; rhs )
    {
        return lhs.column &lt; rhs.column;
    }
};
...

// Globale Variablen
...
extern std::stringstream g_conversionHelperStringStream;
...

// Set samt Comparator
extern std::set&lt;singleColumnEntropySetItem&gt; g_singleEntropies;
</code></pre>
<p>global.cpp</p>
<pre><code class="language-cpp">...
singleColumnEntropySetItemComparator seComp;
set&lt;singleColumnEntropySetItem, seComp&gt; g_singleEntropies;
...
</code></pre>
<p>anders.cpp</p>
<pre><code class="language-cpp">...
    singleColumnEntropySetItem seItem;
    seItem.column = colToCompute;
    seItem.entropy = entropy;
    g_singleEntropies.insert( seItem );
...
</code></pre>
<p>Danke vorab für den Hinweis, was daran noch falsch läuft ... wenn die Kompilierung mal läuft kann ich mir einen Kopf machen, das Set auch auszugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009587</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Fri, 21 Jan 2011 00:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Fri, 21 Jan 2011 00:47:12 GMT]]></title><description><![CDATA[<p>Mittlerweile läufts, aber eher durch Zufall statt durch bewusstes Ändern, naja, wenn ich die nächsten Sets implementiere wird es dann schon zeitnah schnackeln vermute ich ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2009591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009591</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Fri, 21 Jan 2011 00:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to Set aus String-Elementen bei C++ on Fri, 21 Jan 2011 07:13:46 GMT]]></title><description><![CDATA[<p>Das std::set hat drei tmeplate Parameter. Key, Compare, Allokator. Key ist der Typ der gespeichert wird und gelichzeitig als Schlüssel verwendet wird. Compare ist irgendetwas das man mit zwei Keys aufrufen kann und das true zurückgibt, wenn der erste kleiner als der zweite ist. Standard für Compare ist <code>std::less&lt;Key&gt;</code> . Allokator ist für die Speicherverwaltung und hier uninteressant.<br />
Wenn du also ein <code>std::set&lt;MyClass&gt;</code> hast, wird zum Vergleichen zweier <code>MyClass</code> Objekte <code>std::less&lt;MyClass&gt;</code> verwendet. Da es dafür keine Spezialisierung gibt, wird <code>MyClass::operator&lt;(const MyClass&amp;)</code> aufgerufen. Du hast also zwei Möglichkeiten um <code>MyClass</code> iin einem <code>std::set</code> zu verwenden:<br />
Du definierst den &lt; Operator oder du gibst für <code>Compare</code> einen anderen Vergleichstypen an.</p>
<pre><code class="language-cpp">class MyClass
{
public:
    MyClass(int i) : i_(i) {}

    int I() const
    {
        return i_;
    }

    // nur für set1
    bool operator&lt;(const MyClass&amp; r) const
    {
        return i_ &lt; r.i_;
    }

private:
    int i_;
};

struct MyClassLess
{
    bool operator()(const MyClass&amp; lh, const MyClass&amp; rh) const
    {
        return lh.I() &lt; rh.I();
    }
};

struct MyClassGreater
{
    bool operator()(const MyClass&amp; lh, const MyClass&amp; rh) const
    {
        return lh.I() &gt; rh.I();
    }
};

int main() 
{
    std::set&lt;MyClass&gt; set1;  // std::set&lt;A, std::less&lt;A&gt; &gt;
    std::set&lt;MyClass, MyClassLess&gt; set2;
    std::set&lt;MyClass, MyClassGreater&gt; set3;

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2009601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2009601</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Fri, 21 Jan 2011 07:13:46 GMT</pubDate></item></channel></rss>