<?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[Anzahl von gleichen Objekten in einem std::vector herausfinden]]></title><description><![CDATA[<p>Tachchen zusammen,</p>
<p>ich habe einen std::vector mit einer Fülle von Objekten. Dabei sind die Objekte durch einen Type gekennzeichnen, können aber zu diesem Typ verschiedene weitere Werte beinhalten.<br />
Nun möchte ich herausfinden ob innerhalb des vectors objekte mit nem bestimmten Typ aber verschieden oder auch gleichen Werten vorhanden sind. Sprich die Suche muss nach dem Typ erfolgen.<br />
Nun wollte ich mal schauen ob es dafür nicht einen std::algo gibt mit dem man das bewerkstelligen kann. Hatte hier std:count ins Auge gefasst. Nur weiß ich nicht ganz wie jetzt den vector über diesen einen Wert Typ zählen lassen könnte.<br />
Hab als Vergleichswert nur den Typ und kein Objekt.</p>
<p>Oder ist es doch sinnvoller ne kleine Routine zu schreiben die einmal über den vector iteriert und bei jedem objekt mit bestimmten Typ nen zähler inkrementiert?</p>
<p>Gruß<br />
CP</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292907/anzahl-von-gleichen-objekten-in-einem-std-vector-herausfinden</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:41:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292907.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Sep 2011 12:08:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 12:08:55 GMT]]></title><description><![CDATA[<p>Tachchen zusammen,</p>
<p>ich habe einen std::vector mit einer Fülle von Objekten. Dabei sind die Objekte durch einen Type gekennzeichnen, können aber zu diesem Typ verschiedene weitere Werte beinhalten.<br />
Nun möchte ich herausfinden ob innerhalb des vectors objekte mit nem bestimmten Typ aber verschieden oder auch gleichen Werten vorhanden sind. Sprich die Suche muss nach dem Typ erfolgen.<br />
Nun wollte ich mal schauen ob es dafür nicht einen std::algo gibt mit dem man das bewerkstelligen kann. Hatte hier std:count ins Auge gefasst. Nur weiß ich nicht ganz wie jetzt den vector über diesen einen Wert Typ zählen lassen könnte.<br />
Hab als Vergleichswert nur den Typ und kein Objekt.</p>
<p>Oder ist es doch sinnvoller ne kleine Routine zu schreiben die einmal über den vector iteriert und bei jedem objekt mit bestimmten Typ nen zähler inkrementiert?</p>
<p>Gruß<br />
CP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121625</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 12:14:11 GMT]]></title><description><![CDATA[<p>Es gibt auch <code>std::count_if()</code> <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/2121628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121628</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 12:16:54 GMT]]></title><description><![CDATA[<p><s>Schreib eine passende Vergleichsfunktion.</s> Wie ich sehe, nimmt count, im Gegensatz zu den anderen Algorithmen, keine Vergleichsfunktion. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> . Wer hat sich das denn ausgedacht?</p>
<p>Vermutlich ist das einfachste und schnellst, sich das selbst zu schreiben. Hier haste den Code:</p>
<pre><code class="language-cpp">template &lt;class InputIterator, class T&gt;
  ptrdiff_t count ( InputIterator first, InputIterator last, const T&amp; value )
{
  ptrdiff_t ret=0;
  while (first != last) if (*first++ == value) ++ret;
  return ret;
}
</code></pre>
<p>Ersetz dann eben <code>const T&amp; value</code> und <code>==</code> durch etwas angemessenes.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Es gibt auch <code>std::count_if()</code> <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>
</blockquote>
<p>Ahh, jetzt weiß ich ,warum man count ohne Vergleichsfunktion definiert hat :p . Ja, nimm count_if.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121629</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 12:16:57 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121630</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 12:20:15 GMT]]></title><description><![CDATA[<p>Upps..ja die klingt besser:D Danke werd es damit mal probieren;)<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3822">@Sepp</a>: Ebend die Vergleichsfunktion fehlte mir hier auch:D<br />
Nehme count_if!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121632</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 20 Sep 2011 12:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 13:29:44 GMT]]></title><description><![CDATA[<p>Nu steh ich gerade doch etwas aufm Schlauch.<br />
Wie kann ich das ganze denn jetzt nach meinen Ansprüchen nutzen?<br />
Also mein Problem ist jetzt eigentlich eher wie geb ich den mit mit welchem Typ verglichen werden soll?</p>
<pre><code class="language-cpp">bool mycomparer(myobject *o) { return (o.type == typetocompare); //??? }
int mycomparefunction(type Type)
{
    if(!myvector.empty())
    {   
	mycount = (int) count_if (myvector.begin(), 
             myvector.end(), mycomparer);
          //Hier fehlt mir jetzt die Möglichkeit meinen Type zu übergeben.
	return nCount;
    }
}
</code></pre>
<p>Gruß<br />
CP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121667</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 20 Sep 2011 13:29:44 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 13:33:51 GMT]]></title><description><![CDATA[<p>CrazyPlaya schrieb:</p>
<blockquote>
<p>Nu steh ich gerade doch etwas aufm Schlauch.<br />
Wie kann ich das ganze denn jetzt nach meinen Ansprüchen nutzen?<br />
Also mein Problem ist jetzt eigentlich eher wie geb ich den mit mit welchem Typ verglichen werden soll?</p>
<pre><code class="language-cpp">bool mycomparer(myobject *o) { return (o.type == typetocompare); //??? }
int mycomparefunction(type Type)
{
    if(!myvector.empty())
    {   
	mycount = (int) count_if (myvector.begin(), 
             myvector.end(), mycomparer);
          //Hier fehlt mir jetzt die Möglichkeit meinen Type zu übergeben.
	return nCount;
    }
}
</code></pre>
<p>Gruß<br />
CP</p>
</blockquote>
<p>So zb:</p>
<pre><code class="language-cpp">struct IntCompare
{
  int toCompare;

  IntCompare(int comp)
    : toCompare(comp)
  { }

  bool operator()(int val)
  {
    return val == toCompare;
  }
};

if(!myvector.empty())
{  
  mycount = count_if(myvector.begin(), myvector.end(), IntCompare(7));
  return mycount;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2121669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121669</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 20 Sep 2011 13:33:51 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 13:53:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int mycomparefunction(type Type)
{
  struct mycomparer
  {
    type typetocompare;

    mycomparer(type typetocompare)
      : typetocompare(typetocompare)
    {
    }

    bool operator ()(myobject* o) const
    {
      return o-&gt;type == typetocompare;
    }
  };

  return static_cast&lt;int&gt;(count_if(myvector.begin(), myvector.end(), mycomparer(type)));
}
</code></pre>
<p>Oder in C++11</p>
<pre><code class="language-cpp">int mycomparefunction(type Type)
{
  return static_cast&lt;int&gt;(count_if(begin(myvector), end(myvector), [=](myobject* o) {
    return o-&gt;type == Type;
  }));
}
</code></pre>
<p>Rein prinzipiell aber vielleicht noch ein Hinweis: Überleg dir doch nochmal ganz genau, ob das, was du da treibst, so eigentlich eine gute Lösung ist. Warum brauchen diese myobject Dinger ein Feld names type? Was genau willst du da modellieren, dass du dir eigenes Typsystem bauen musst und nicht das von C++ benutzen kannst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121671</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 20 Sep 2011 13:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 13:40:03 GMT]]></title><description><![CDATA[<p>Bau einen Funktor (oder besser: einen Lambda-Ausdruck, aber ich mach mal ganz klassisch auf C++98, anstatt auf C++11). Ungetestet:</p>
<pre><code class="language-cpp">class My_Comparator
{
 private:
  mytype type;
 public:
  My_Comparator(const mytype&amp; type): type(type) {}
  bool operator()(const myobject&amp; object) { return object.type == type; }
};

// ...
count_if (myvector.begin(), myvector.end(), My_Comparator(vergleichstyp));
</code></pre>
<p>Eventuelle Syntaxfehler die ich beim Programmieren im Foreneditorfenster gemacht habe dienen der Vertiefung des Verstaändnisses, weil du es nicht ungelesen übernehmen kannst.</p>
<p>edit: Oh, viel zu langsam...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121672</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 20 Sep 2011 13:40:03 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 13:59:48 GMT]]></title><description><![CDATA[<p>Hey ok....besten dank an alle:)<br />
So gehts <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 />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Deine Lösung als Klasse gefällt mir persönlich am besten!<br />
Lambda Ausdrücke funktionieren aber nur mit C++11 richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121678</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 20 Sep 2011 13:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 14:13:31 GMT]]></title><description><![CDATA[<p>Wenn Du boost benutzt, kannst Du zum Typen speichern auch <code>boost.variant</code> benutzen. Dann wird das relativ einfach:</p>
<pre><code class="language-cpp">#include &lt;boost/variant.hpp&gt;

#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct my_type{};

typedef boost::variant&lt;int, float, double, my_type&gt; multi_type;
typedef std::vector&lt;multi_type&gt; multi_type_vector;

template&lt;typename T&gt;
struct my_visitor : public boost::static_visitor&lt;bool&gt;
{
    template&lt;typename U&gt;
    bool operator()(U const &amp;) const
    {
        return false;
    }

    bool operator() (T const &amp;) const
    {
        return true;
    }    
};

template&lt;typename T&gt;
struct my_predicate
{
    bool operator()(multi_type const &amp; obj) const
    {
        return boost::apply_visitor(my_visitor&lt;T&gt;(), obj);
    }
};

int main()
{
    multi_type_vector vec;
    vec.push_back(10);
    vec.push_back(3.14159f);
    vec.push_back(0.7071);
    vec.push_back(3.14159);
    vec.push_back(42);
    vec.push_back(my_type());

    std::cout 
        &lt;&lt; &quot;ints: &quot; &lt;&lt; std::count_if(vec.begin(), vec.end(), my_predicate&lt;int&gt;()) &lt;&lt; '\n'
        &lt;&lt; &quot;floats: &quot; &lt;&lt; std::count_if(vec.begin(), vec.end(), my_predicate&lt;float&gt;()) &lt;&lt; '\n'
        &lt;&lt; &quot;doubles: &quot; &lt;&lt; std::count_if(vec.begin(), vec.end(), my_predicate&lt;double&gt;()) &lt;&lt; '\n'
        &lt;&lt; &quot;my_types: &quot; &lt;&lt; std::count_if(vec.begin(), vec.end(), my_predicate&lt;my_type&gt;()) &lt;&lt; std::endl;
}
</code></pre>
<p>Dannach kannst Du einfach neue Typen zum variant hinzufügen oder wegnehmen. Der Rest geht automatisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121693</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 20 Sep 2011 14:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 14:13:23 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn Du boost benutzt, kannst Du zum Typen speichern auch <code>boost.variant</code> benutzen. Dann wird das relativ einfach:</p>
</blockquote>
<p>Und zu 98% ein Designfehler, weil die Objekte in gemeinsamen Containern genug miteuinander zu tun haben, daß man normale Polymorphie verwenden sollte, oder weil sie so wenig miteinander zu tun haben, daß man getrennte COntainer verwenden sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121694</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 20 Sep 2011 14:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 14:26:59 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn Du boost benutzt, kannst Du zum Typen speichern auch <code>boost.variant</code> benutzen. Dann wird das relativ einfach:</p>
</blockquote>
<p>Und zu 98% ein Designfehler, weil die Objekte in gemeinsamen Containern genug miteuinander zu tun haben, daß man normale Polymorphie verwenden sollte, oder weil sie so wenig miteinander zu tun haben, daß man getrennte COntainer verwenden sollte.</p>
</blockquote>
<p>Da hast Du sicherlich recht, jedoch habe ich nichts bewertet, sondern nur eine mögliche Lösung angeboten... <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>
<p>Dinge wie <code>o.type</code> implizieren auch, dass es wohl nichts polymorphes ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121695</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 20 Sep 2011 14:26:59 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 14:32:32 GMT]]></title><description><![CDATA[<p>Boost darf ich leider nicht benutzen...fragt mich nicht warum ist aber so und garantiert nicht meine Anweisung:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121708</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 20 Sep 2011 14:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Anzahl von gleichen Objekten in einem std::vector herausfinden on Tue, 20 Sep 2011 14:34:16 GMT]]></title><description><![CDATA[<p>Ich halte es für wahrscheinlicher, daß da eigentlich schon Polymorphes ist, aber der Benutzer statt mit virtuellen Funktionen selber dispatchen will. Beliebter Anfängerfehler. variant ist dabei der Pfad des Bösen. Man kann ihn beschreiten, muß aber in Kauf nehmen, daß man, ohne es noch beeinflussen zu können, immer böser wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121710</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 20 Sep 2011 14:34:16 GMT</pubDate></item></channel></rss>