<?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[Problem mit Suche in Listen]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>folgendes Problem:</p>
<pre><code class="language-cpp">#include &lt;list&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

class MyClass {
private:
  int i;
  //...

public:
  int  get_i() {return i;}
  void set_i(int n) {i = n;}

  MyClass(int n) : i(n) {}
};

typedef std::list&lt;MyClass&gt; MyList;

int main() {
  MyList ml;
  ml.push_back(MyClass(3));
  ml.push_back(MyClass(7));
  ml.push_back(MyClass(4));
}
</code></pre>
<p>wie lässt sich die Liste nun nach <code>MyClass::i</code> durchsuchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237380/problem-mit-suche-in-listen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 12:37:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237380.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Mar 2009 00:32:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Suche in Listen on Sat, 28 Mar 2009 00:32:14 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>folgendes Problem:</p>
<pre><code class="language-cpp">#include &lt;list&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

class MyClass {
private:
  int i;
  //...

public:
  int  get_i() {return i;}
  void set_i(int n) {i = n;}

  MyClass(int n) : i(n) {}
};

typedef std::list&lt;MyClass&gt; MyList;

int main() {
  MyList ml;
  ml.push_back(MyClass(3));
  ml.push_back(MyClass(7));
  ml.push_back(MyClass(4));
}
</code></pre>
<p>wie lässt sich die Liste nun nach <code>MyClass::i</code> durchsuchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687203</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 28 Mar 2009 00:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Suche in Listen on Sat, 28 Mar 2009 08:27:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//hier mal wie man jegliche MyClass ausgibt

for(int i = 0;i&lt;ml.size();i++)
{
    std::cout&lt;&lt;ml[i].get_i()&lt;&lt;std::endl;
}
</code></pre>
<p>ISt deine Frage damit geklärt? Weil ich denke es ging dir um den Zugriff oder irre ich mich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687243</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 28 Mar 2009 08:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Suche in Listen on Sat, 28 Mar 2009 09:59:40 GMT]]></title><description><![CDATA[<p>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="🙂"
    /><br />
das ist zwar ein Ansatz für Vektoren aber das schaff ich gerade noch, das einer liste beizubringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687275</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 28 Mar 2009 09:59:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Suche in Listen on Sat, 28 Mar 2009 10:12:45 GMT]]></title><description><![CDATA[<p>Ahh stimmt, ich vergass das std::list ja gar keinen operator[] hat.Du könntest es ja auch über iteratoren machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687279</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sat, 28 Mar 2009 10:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Suche in Listen on Sat, 28 Mar 2009 12:36:55 GMT]]></title><description><![CDATA[<p><strong>Prozeduraler Ansatz:</strong> Ist anzuraten, falls du die Suche nicht oft wiederverwendest. Halt ganz typisch in einer Schleife suchen. Je nach Anforderung einen Iterator auf das erste Element zurückgeben oder gleich für alle gleichen Elemente etwas tun.</p>
<pre><code class="language-cpp">for (MyList::iterator iter = m1.begin(); iter != m1.end(); ++iter)
{
    if (iter-&gt;get_i() == 45)
    {
       return iter; // erstes Vorkommen zurückgeben
    }
}
</code></pre>
<p><strong>Funktionaler Ansatz:</strong> Wenn die Klassen gleich sind, sofern deren <code>i</code> s gleich sind, kannst du den Gleichheitsoperator überladen. Allerdings würde ich das vor allem tun, wenn ich sonst noch irgendwo auf Gleichheit prüfen muss. Ich habe hier mal eine Möglichkeit der Standardbibliothek aufgelistet, Boost.Lambda wäre je nachdem eine Alternative.</p>
<pre><code class="language-cpp">bool operator== (const MyClass&amp; Left, const MyClass&amp; Right)
{
    return Left.get_i() == Right.get_i();
}

// .. bei der Anwendung:
return std::find(m1.begin(), m1.end(), 45); // impliziert nicht expliziten Konstruktor ;)
</code></pre>
<p>Falls es dir nicht um eine eigentliche Suche (Lokalisierung des ersten Vorkommens), sondern um eine Anwendung geht, die für alle übereinstimmenden Werte etwas Bestimmtes tun soll, ist vielleicht <code>std::for_each()</code> besser geeignet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687368</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 28 Mar 2009 12:36:55 GMT</pubDate></item></channel></rss>