<?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[Optimaler container für viele inserts + find_if?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion in meinem Code, welche laut Profiler weit über 90% der gesamten Laufzeit beansprucht. Die Funktion sieht so aus:</p>
<pre><code>struct data
{
    double error;
    std::vector&lt;int&gt; values;
};

std::vector&lt;data&gt; data_container;

bool contains_data(data const &amp;dat, std::vector&lt;data&gt;::iterator &amp;it)
{
    // Das hier ist langsam
    it = std::find_if(data_container.begin(), data_container.end(), [&amp;dat](data const &amp;d)
    {
        return dat.values == d.values;
    });
    return it != data_container.end();
}
</code></pre>
<p>Also ich habe ein struct <code>data</code> , welches einen <code>vector&lt;int&gt;</code> und ein <code>double</code> beinhaltet. Der vector kann dabei beliebig lang sein (üblicherweise zwischen 10 - 100 Elementen).</p>
<p>Dann hab ich einen <code>vector&lt;data&gt;</code> , der hier mit <code>data_container</code> bezeichnet ist. Dieser wird während der Laufzeit des Programs sehr schnell befüllt und hat nach wenigen Minuten bereits mehrere 100000 Elemente (oder noch mehr).</p>
<p>Das Suchen in diesem (rasant wachsenden) vector stellt sich jetzt als Performance-Problem heraus... Welche Datenstruktur würdet ihr für so eine Anwendung empfehlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332761/optimaler-container-für-viele-inserts-find_if</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 13:46:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332761.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 May 2015 19:41:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Optimaler container für viele inserts + find_if? on Wed, 20 May 2015 19:41:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Funktion in meinem Code, welche laut Profiler weit über 90% der gesamten Laufzeit beansprucht. Die Funktion sieht so aus:</p>
<pre><code>struct data
{
    double error;
    std::vector&lt;int&gt; values;
};

std::vector&lt;data&gt; data_container;

bool contains_data(data const &amp;dat, std::vector&lt;data&gt;::iterator &amp;it)
{
    // Das hier ist langsam
    it = std::find_if(data_container.begin(), data_container.end(), [&amp;dat](data const &amp;d)
    {
        return dat.values == d.values;
    });
    return it != data_container.end();
}
</code></pre>
<p>Also ich habe ein struct <code>data</code> , welches einen <code>vector&lt;int&gt;</code> und ein <code>double</code> beinhaltet. Der vector kann dabei beliebig lang sein (üblicherweise zwischen 10 - 100 Elementen).</p>
<p>Dann hab ich einen <code>vector&lt;data&gt;</code> , der hier mit <code>data_container</code> bezeichnet ist. Dieser wird während der Laufzeit des Programs sehr schnell befüllt und hat nach wenigen Minuten bereits mehrere 100000 Elemente (oder noch mehr).</p>
<p>Das Suchen in diesem (rasant wachsenden) vector stellt sich jetzt als Performance-Problem heraus... Welche Datenstruktur würdet ihr für so eine Anwendung empfehlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454253</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 20 May 2015 19:41:33 GMT</pubDate></item><item><title><![CDATA[Reply to Optimaler container für viele inserts + find_if? on Wed, 20 May 2015 20:04:46 GMT]]></title><description><![CDATA[<p>std::set bzw. std::unordered_set?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454255</guid><dc:creator><![CDATA[sat]]></dc:creator><pubDate>Wed, 20 May 2015 20:04:46 GMT</pubDate></item><item><title><![CDATA[Reply to Optimaler container für viele inserts + find_if? on Wed, 20 May 2015 20:27:02 GMT]]></title><description><![CDATA[<p>sat schrieb:</p>
<blockquote>
<p>std::set bzw. std::unordered_set?</p>
</blockquote>
<p>Ja also an <code>unordered_set</code> hab ich auch schon gedacht (die Reihenfolge ist egal, deswegen ist <code>unordered_set</code> wahrscheinlich besser als <code>set</code> ), aber wie kann ich einen <code>vector&lt;int&gt;</code> als key in einem <code>unordered_set</code> benutzen?</p>
<p>Dafür braucht man ja wahrscheinlich eine eigene hash Funktion, aber wie soll die bei einem vector aussehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454259</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 20 May 2015 20:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to Optimaler container für viele inserts + find_if? on Wed, 20 May 2015 21:03:01 GMT]]></title><description><![CDATA[<p><a href="http://stackoverflow.com/questions/20511347/a-good-hash-function-for-a-vector" rel="nofollow">http://stackoverflow.com/questions/20511347/a-good-hash-function-for-a-vector</a></p>
<p>ganz unten</p>
<pre><code class="language-cpp">std::size_t operator()(std::vector&lt;uint32_t&gt; const&amp; vec) const {
  std::size_t seed = 0;
  for(auto&amp; i : vec) {
    seed ^= i + 0x9e3779b9 + (seed &lt;&lt; 6) + (seed &gt;&gt; 2);
  }
  return seed;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2454261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454261</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 20 May 2015 21:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to Optimaler container für viele inserts + find_if? on Wed, 20 May 2015 21:33:14 GMT]]></title><description><![CDATA[<p>Ok danke, werd ich mal ausprobieren <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/2454266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454266</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Wed, 20 May 2015 21:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Optimaler container für viele inserts + find_if? on Thu, 21 May 2015 14:14:11 GMT]]></title><description><![CDATA[<p><a href="http://www.boost.org/doc/libs/1_58_0/doc/html/hash/reference.html#idp32420512-bb" rel="nofollow">boost::hash</a> kann auch <code>vector</code> . Aber das wäre natürlich zu einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454320</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 21 May 2015 14:14:11 GMT</pubDate></item></channel></rss>