<?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[suchen in Sets mit eigener Klasse]]></title><description><![CDATA[<p>Hallo...</p>
<p>vielleicht kann mir hier jemand helfen.</p>
<p>Ich habe eine Klasse &quot;Schlüssel&quot;, welche sich aus 3 Elementen zusammensetzt<br />
Name1,Name2,Wert</p>
<p>diese Klasse Schlüssel speicher ich in einen Set, um die Elemente zu sortieren. Hierfür habe ich schon den &lt;operator überladen.</p>
<p>Nun möchte ich gern in meinen abgespeicherten Schlüssel auch suchen.<br />
Hierfür will ich einmal nach Schlüssel suchen, welche nur mit Name1 anfangen oder auch nach Schlüsseln suchen, welche mit Name1 und Name2 anfangen und natürlich auch mit Name1, Name2, und Wert.</p>
<p>Zuerst dachte ich ok, überlade ich auch den == operator, aber dann kann ich damit ja nur einen Fall abdecken... was kann ich denn da noch tun?</p>
<p>Kann man den find operator auch überladen?</p>
<p>Dankeschön</p>
<p>Viele Grüße<br />
Julia</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282221/suchen-in-sets-mit-eigener-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 09:37:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282221.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Feb 2011 10:15:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to suchen in Sets mit eigener Klasse on Wed, 16 Feb 2011 10:15:33 GMT]]></title><description><![CDATA[<p>Hallo...</p>
<p>vielleicht kann mir hier jemand helfen.</p>
<p>Ich habe eine Klasse &quot;Schlüssel&quot;, welche sich aus 3 Elementen zusammensetzt<br />
Name1,Name2,Wert</p>
<p>diese Klasse Schlüssel speicher ich in einen Set, um die Elemente zu sortieren. Hierfür habe ich schon den &lt;operator überladen.</p>
<p>Nun möchte ich gern in meinen abgespeicherten Schlüssel auch suchen.<br />
Hierfür will ich einmal nach Schlüssel suchen, welche nur mit Name1 anfangen oder auch nach Schlüsseln suchen, welche mit Name1 und Name2 anfangen und natürlich auch mit Name1, Name2, und Wert.</p>
<p>Zuerst dachte ich ok, überlade ich auch den == operator, aber dann kann ich damit ja nur einen Fall abdecken... was kann ich denn da noch tun?</p>
<p>Kann man den find operator auch überladen?</p>
<p>Dankeschön</p>
<p>Viele Grüße<br />
Julia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2021706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021706</guid><dc:creator><![CDATA[Julia_Prog]]></dc:creator><pubDate>Wed, 16 Feb 2011 10:15:33 GMT</pubDate></item><item><title><![CDATA[Reply to suchen in Sets mit eigener Klasse on Wed, 16 Feb 2011 10:30:40 GMT]]></title><description><![CDATA[<p>Zunächst einmal wirst du nicht set::find benutzen können. Dieses ist bereits mit deinem operator&lt; verknüpft und benutzt ausschließlich diesen.</p>
<p>Es gibt auch noch std::find, diese benutzt den Operator==, so dass du dir da einen eigenen definieren kannst. Weiterhin kannst du dies mit find_if noch verfeinern. Das ganze wäre dann aber eine sequentielle Suche über das ganze set, d.h. alle Vorteile von set gingen bei der Suche verloren.</p>
<p>Was vielleicht möglich wäre: Ist es möglich, eine Klasse als halbfertig zu markieren? Also dass du z.B. dem Schlüssel 2 einen besonderen Wert gibst oder einen bool setzt, dass danach nicht sortiert werden soll? Dein Operator&lt; muss dies dann beachten. Und du solltest dann ein multiset nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2021710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021710</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 Feb 2011 10:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to suchen in Sets mit eigener Klasse on Wed, 16 Feb 2011 10:35:01 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort... die sequentielle Suche wollte ich eben vermeiden, sonst kann ich ja einfahc einen Iterator darüber laufen lassen <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>
<p>Ob ich in der Klasse irgendwo was makieren kann, bin ich mir nicht so sicher.. aber trotzdem danke <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/2021712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021712</guid><dc:creator><![CDATA[Julia_Prog]]></dc:creator><pubDate>Wed, 16 Feb 2011 10:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to suchen in Sets mit eigener Klasse on Wed, 16 Feb 2011 10:42:28 GMT]]></title><description><![CDATA[<p>Das Stichwort dafür lautet: Functor</p>
<p>Du kannst anstatt set::find() die freie Funktion std::find_if(...) dafür benutzen, s. <a href="http://www.cplusplus.com/reference/algorithm/find_if/" rel="nofollow">http://www.cplusplus.com/reference/algorithm/find_if/</a></p>
<p>Du mußt dann nur entsprechend verschiedene Vergleichsfunktionen implementieren und diese dann als 3. Parameter angeben.</p>
<p>P.S. theta hatte dir doch schon dieselbe Antwort gegeben: <a href="http://www.c-plusplus.net/forum/p2018763#2018763" rel="nofollow">http://www.c-plusplus.net/forum/p2018763#2018763</a> ...</p>
<p>Noch ein P.S.: Wenn du die sequentielle Suche vermeiden willst, dann benötigst du eine andere Datenstruktur, z.B. std::map und zwar für jede deiner Suchmöglichkeiten je eine.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2021714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021714</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 16 Feb 2011 10:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to suchen in Sets mit eigener Klasse on Wed, 16 Feb 2011 10:45:24 GMT]]></title><description><![CDATA[<p>aber ich dachte das geht dann nicht für sets? sorry war mir gar nicht so bewusst, dass ich ja schon eine ähnliche Frage gestellt habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2021717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021717</guid><dc:creator><![CDATA[Julia_Prog]]></dc:creator><pubDate>Wed, 16 Feb 2011 10:45:24 GMT</pubDate></item><item><title><![CDATA[Reply to suchen in Sets mit eigener Klasse on Wed, 16 Feb 2011 11:25:18 GMT]]></title><description><![CDATA[<p>Ich dachte an so etwas:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;set&gt;

using namespace std;

class foo
{
  int wert1;
  double wert2;
  bool sort_wert2;

public:
  explicit foo(int wert1): wert1(wert1), sort_wert2(false){}
  foo(int wert1, double wert2): wert1(wert1), wert2(wert2), sort_wert2(true){}

  friend bool operator&lt;(const foo&amp; a, const foo&amp; b)
  {
    if (a.wert1&lt;b.wert1) return true;
    if ((a.wert1==b.wert1) &amp;&amp; a.sort_wert2 &amp;&amp; b.sort_wert2)
      if (a.wert2&lt;b.wert2)  return true;
    return false;
  }

  friend ostream&amp; operator&lt;&lt;(ostream &amp;out, const foo&amp; a)
  {
    out&lt;&lt;'('&lt;&lt;a.wert1&lt;&lt;','&lt;&lt;a.wert2&lt;&lt;')';
    return out;
  }
};

int main()
{
  multiset&lt;foo&gt; foos;

  foos.insert(foo(3,2));
  foos.insert(foo(3,3));
  foos.insert(foo(3,4));
  foos.insert(foo(1,2));
  foos.insert(foo(1,3));
  foos.insert(foo(1,4));
  foos.insert(foo(2,4));
  foos.insert(foo(2,3));
  foos.insert(foo(2,2));

  cout&lt;&lt;&quot;In sortierter Reihenfolge:\n&quot;;
  for (multiset&lt;foo&gt;::iterator it=foos.begin(); it!=foos.end(); ++it)
    cout&lt;&lt;(*it)&lt;&lt;'\n';
  cout&lt;&lt;'\n';

  cout&lt;&lt;&quot;Ist (3,1) enthalten?\n&quot;;
  if (foos.count(foo(3,1))) cout &lt;&lt;&quot;Ja\n\n&quot;;
  else  cout &lt;&lt;&quot;Nein\n\n&quot;;

  cout&lt;&lt;&quot;Ist (3,2) enthalten?\n&quot;;
  if (foos.count(foo(3,2))) cout &lt;&lt;&quot;Ja\n\n&quot;;
  else  cout &lt;&lt;&quot;Nein\n\n&quot;;

  cout&lt;&lt;&quot;Sind (4,*) enthalten?\n&quot;;
  if (foos.count(foo(4))) cout &lt;&lt;&quot;Ja, und zwar &quot;&lt;&lt; foos.count(foo(4)) &lt;&lt;&quot; Stück \n\n&quot;;
  else  cout &lt;&lt;&quot;Nein\n\n&quot;;

  cout&lt;&lt;&quot;Sind (2,*) enthalten?\n&quot;;
  if (foos.count(foo(2))) cout &lt;&lt;&quot;Ja, und zwar &quot;&lt;&lt; foos.count(foo(2)) &lt;&lt;&quot; Stück \n\n&quot;;
  else  cout &lt;&lt;&quot;Nein\n\n&quot;;

  cout&lt;&lt;&quot;Alle (2,*):\n&quot;;
  pair&lt;multiset&lt;foo&gt;::iterator, multiset&lt;foo&gt;::iterator&gt; ret = foos.equal_range(foo(2));
   for (multiset&lt;foo&gt;::iterator it=ret.first; it!=ret.second; ++it)
     cout&lt;&lt;(*it)&lt;&lt;'\n';

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2021728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2021728</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 16 Feb 2011 11:25:18 GMT</pubDate></item></channel></rss>