<?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[In Vektor&amp;lt;struct&amp;gt; suchen]]></title><description><![CDATA[<p>Hallo an alle!</p>
<p>Ich habe z.B folgendes Strukt:</p>
<pre><code>struct GdomWW 
{
	int arcid;
	double value;

};
</code></pre>
<p>Dieses Strukt packe ich einen Vektor!</p>
<pre><code>vector&lt;GdomWW&gt; readGdomWWFile(string filename) {   // --  Tabelle lesen
	cout&lt;&lt;&quot;Lese GDomWW file!&quot;&lt;&lt;endl;
	ifstream file(filename);
	vector&lt;GdomWW&gt; table;
	if (!file.is_open()) {
		cerr &lt;&lt; &quot;Fehler beim Oeffnen der Datei&quot; &lt;&lt; endl;
		return table;
	}

	file.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n'); // erste Zeile überspringen
	for (GdomWW s; file &gt;&gt;setprecision(16)&gt;&gt; s.arcid &gt;&gt; Char&lt;','&gt; &gt;&gt; s.value;)
		table.push_back(s);
	if (!file.eof()) // falls bis End-Of-File gelesen wurde, ist alles iO
	{
		cerr &lt;&lt; &quot;Fehler beim Lesen der Datei&quot; &lt;&lt; endl;
		return table;
	}

	return table;
}
</code></pre>
<p>Nun meine Frage: Wie suche ich in einen vektor&lt;GdomWW&gt; am effizentesten?<br />
Z.B. nach einer bestimmten arcid?</p>
<p>Vielen Dank schon mal <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/topic/320979/in-vektor-lt-struct-gt-suchen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:06:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320979.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Oct 2013 16:22:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:23:00 GMT]]></title><description><![CDATA[<p>Hallo an alle!</p>
<p>Ich habe z.B folgendes Strukt:</p>
<pre><code>struct GdomWW 
{
	int arcid;
	double value;

};
</code></pre>
<p>Dieses Strukt packe ich einen Vektor!</p>
<pre><code>vector&lt;GdomWW&gt; readGdomWWFile(string filename) {   // --  Tabelle lesen
	cout&lt;&lt;&quot;Lese GDomWW file!&quot;&lt;&lt;endl;
	ifstream file(filename);
	vector&lt;GdomWW&gt; table;
	if (!file.is_open()) {
		cerr &lt;&lt; &quot;Fehler beim Oeffnen der Datei&quot; &lt;&lt; endl;
		return table;
	}

	file.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n'); // erste Zeile überspringen
	for (GdomWW s; file &gt;&gt;setprecision(16)&gt;&gt; s.arcid &gt;&gt; Char&lt;','&gt; &gt;&gt; s.value;)
		table.push_back(s);
	if (!file.eof()) // falls bis End-Of-File gelesen wurde, ist alles iO
	{
		cerr &lt;&lt; &quot;Fehler beim Lesen der Datei&quot; &lt;&lt; endl;
		return table;
	}

	return table;
}
</code></pre>
<p>Nun meine Frage: Wie suche ich in einen vektor&lt;GdomWW&gt; am effizentesten?<br />
Z.B. nach einer bestimmten arcid?</p>
<p>Vielen Dank schon mal <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/2361408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361408</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:41:12 GMT]]></title><description><![CDATA[<p>Ein Funktor:</p>
<pre><code>struct GdomWW 
{
    int arcid;
    double value;

    struct CompareArcIds
    {
        int id;

        bool operator()( GdomWW const&amp; obj ) const
        {
            return obj.arcid == id;
        }
    };
};

// ...

auto iter = std::find_if( vec.begin(), vec.end(), GdomWW::CompareArcIds{7} ); // vec steht für deinen vector
</code></pre>
<p>(ungetestet)<br />
Falls du kein C++11 zur Verfügung hast, schreibe einen entsprechenden Konstruktor für <code>CompareArcIds</code> , ersetze die geschweiften Klammern in der letzten Zeile durch runde, und ersetze das auto durch <code>std::vector&lt;GdomWW&gt;::iterator</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361411</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:31:00 GMT]]></title><description><![CDATA[<p>Onubub schrieb:</p>
<blockquote>
<p>Nun meine Frage: Wie suche ich in einen vektor&lt;GdomWW&gt; am effizentesten?<br />
Z.B. nach einer bestimmten arcid?</p>
</blockquote>
<p>Du kannst natürlich immer eine Lineare Suche machen. Wenn es schneller gehen soll, musst du vorher sortieren, aber man kann den Vektor natürlich immer nur nach einem Kriterium gleichzeitig sortieren. Funktionen dafür findest du in &lt;algorithm&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361412</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:34:06 GMT]]></title><description><![CDATA[<p>Ach, die Frage ist, wie du es am <em>effizientesten</em> machst, nicht, wie überhaupt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Tja, ein <code>vector</code> ist prinzipiell unsortiert, daher ist dort eine lineare Suche angebracht, die du wie im obigen (hoffentlich fehlerfreien) Beispiel vollführen kannst.</p>
<p>Solltest du einen immer sortierten Container benötigen, schau dir mal <code>std::set</code> / <code>std::multiset</code> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361413</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:34:43 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Ein Funktor:</p>
<pre><code>struct GdomWW 
{
    int arcid;
    double value;
 
    struct CompareArcIds
    {
        int id;

        bool operator()( GdomWW const&amp; obj ) const
        {
            return obj.arcid == id;
        }
    };
};

// ...

auto iter = std::find( vec.begin(), vec.end(), GdomWW::CompareArcIds{7} ); // vec steht für deinen vector
</code></pre>
<p>(ungetestet)<br />
Falls du kein C++11 zur Verfügung hast, schreibe einen entsprechenden Konstruktor für <code>CompareArcIds</code> , ersetze die geschweiften Klammern in der letzten Zeile durch runde, und ersetze das auto durch <code>std::vector&lt;GdomWW&gt;::iterator</code> .</p>
</blockquote>
<p>Danke für die schnelle Antwort. <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>
<p>könntest du mir das noch ein bisschen näher erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361414</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:40:12 GMT]]></title><description><![CDATA[<p>Wäre es hier nicht einfacher und intuitiver den Vergleichsoperator zu überladen oder einfach std::find_if mit einer kleinen Lambdafunktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361417</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:40:12 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 18:23:11 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Wäre es hier nicht einfacher und intuitiver den Vergleichsoperator zu überladen</p>
</blockquote>
<p>Und dann ein unnötiges temporäres Objekt zu erstellen?<br />
Abgesehen davon nahm ich an, <code>arcid</code> ist irgendein Element, dass dem Objekt aber definitiv keine 'Identität' verleiht. Wenn man den Vergleichsoperator überlädt, dann ist das recht allgemein.</p>
<blockquote>
<p>oder einfach std::find_if mit einer kleinen Lambdafunktion?</p>
</blockquote>
<p>Nein! Wenn schon richtiges C++11, dann gleich range-based for:</p>
<pre><code>for( auto const&amp; i : vec )
    if( i.arcid == 7 )
    {
        // tu etwas mit i
        break; // Abbrechen, falls gewünscht
    }
</code></pre>
<p>Wieso irgendein ekliges Biest wie</p>
<pre><code>std::find_if( std::begin(vec), std::end(vec), []( GdomWW const&amp; g ){ return g.arcid == 7; } );
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361423</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 19 Oct 2013 18:23:11 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 16:53:26 GMT]]></title><description><![CDATA[<blockquote>
<p>Wieso irgendein ekliges Biest wie</p>
<pre><code>std::find_if( std::begin(vec), std::end(vec), []( GdomWW const&amp; g ){ return g.arcid == 7; } );
</code></pre>
<p>?</p>
</blockquote>
<p>Ja genau! <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361428</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 16:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 17:12:12 GMT]]></title><description><![CDATA[<p>Ist denn</p>
<pre><code>for( auto const&amp; i : vec )
    if( i.arcid == 7 )
    {
        // tu etwas mit i
    }
</code></pre>
<p>schneller als</p>
<pre><code>struct GdomWW 
{
    int arcid;
    double value;

    struct CompareArcIds
    {
        int id;

        bool operator()( GdomWW const&amp; obj ) const
        {
            return obj.arcid == id;
        }
    };
};

// ...

auto iter = std::find( vec.begin(), vec.end(), GdomWW::CompareArcIds{7} ); // vec steht für deinen vector
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2361431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361431</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 17:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 17:46:56 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>oder einfach std::find_if mit einer kleinen Lambdafunktion?</p>
</blockquote>
<p>Nein! Wenn schon richtiges C++11, dann gleich range-based for:</p>
<pre><code>for( auto const&amp; i : vec )
    if( i.arcid == 7 )
    {
        // tu etwas mit i
    }
</code></pre>
<p>Wieso irgendein ekliges Biest wie</p>
<pre><code>std::find_if( std::begin(vec), std::end(vec), []( GdomWW const&amp; g ){ return g.arcid == 7; } );
</code></pre>
<p>?</p>
</blockquote>
<p>Und das macht schon mal etwas ganz anderes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361438</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 19 Oct 2013 17:46:56 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 18:22:45 GMT]]></title><description><![CDATA[<p>Ich sehe es sofort. Ich habe das <code>break;</code> vergessen. Das stand da ursprünglich, ich habe keinen blassen Schimmer, wieso es verschwunden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361442</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 19 Oct 2013 18:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 18:51:23 GMT]]></title><description><![CDATA[<p>Wie bekomme ich die position raus wenn ich die gewünschte zahl in meinen vektor gefunden habe?</p>
<pre><code>for( auto const&amp; i : vec )
    if( i.arcid == 7 )
    {
        // tu etwas mit i
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2361449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361449</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 18:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 18:59:54 GMT]]></title><description><![CDATA[<p>Ach, du willst die Position? Das ist etwas anderes. Ich dachte, du willst das Element, um damit direkt etwas zu tun. In dem Fall, nimm einfach die Version mit <a href="https://www.google.de/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;cad=rja&amp;sqi=2&amp;ved=0CDwQFjAB&amp;url=http%3A%2F%2Fde.cppreference.com%2Fw%2Fcpp%2Falgorithm%2Ffind&amp;ei=HNZiUp7cKean0AXP4oCoCw&amp;usg=AFQjCNFDvzaJBX4lUQFpgmJ3vxUCdsbV8A&amp;bvm=bv.54934254,d.d2k" rel="nofollow">std::find_if</a> und wende <a href="https://www.google.de/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;cad=rja&amp;ved=0CD0QFjAB&amp;url=http%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Fiterator%2Fdistance&amp;ei=DtZiUr2CJOu60wWRpYAQ&amp;usg=AFQjCNHgQpUwvhqY9WngNUVp0Un6Y5F1mg&amp;bvm=bv.54934254,d.d2k" rel="nofollow">std::distance</a> an (um den Abstand zum Anfang des Vektors zu bekommen).<br />
Falls du überhaupt tatsächlich die Position brauchst, und nicht irgendeinen Iterator.</p>
<p>Oder du durchläufst den Vektor mit einem Index, dann hast du den Index bzw. die Position direkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361451</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 19 Oct 2013 18:59:54 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:02:09 GMT]]></title><description><![CDATA[<p>Und was wäre schneller weil ich öfters in großen Vektoren suche! <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/2361453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361453</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:02:34 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>In dem Fall, nimm einfach [megamühsame Hacks]</p>
</blockquote>
<p>Genau das stört mich an den neuen for-Loops. Wenn ich im Nachhinein den Iterator oder sowas von dem Element will, muss ich <em>alles</em> umschreiben. Jeden . in -&gt;. Also praktisch das Gegenteil von generisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361454</guid><dc:creator><![CDATA[epicfail++11]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:03:19 GMT]]></title><description><![CDATA[<p>Onubub schrieb:</p>
<blockquote>
<p>Und was wäre schneller weil ich öfters in großen Vektoren suche! <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>
</blockquote>
<p>Maps verwenden <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 />
In Vektoren suchen ist immer langsam, egal wie du es machst (und alle Varianten sind gleich schnell).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361455</guid><dc:creator><![CDATA[epicfail++11]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:05:40 GMT]]></title><description><![CDATA[<p>epicfail++11 schrieb:</p>
<blockquote>
<p>Onubub schrieb:</p>
<blockquote>
<p>Und was wäre schneller weil ich öfters in großen Vektoren suche! <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>
</blockquote>
<p>Maps verwenden <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 />
In Vektoren suchen ist immer langsam, egal wie du es machst (und alle Varianten sind gleich schnell).</p>
</blockquote>
<p>Ja aber ich habe auch eine struktur die so aussieht</p>
<pre><code>struct CityWaterMap // eine struct für die City Water Map Tabelle
{
	int arcid_dvsn;
	int kontiID_dvsn;
	int arcid_city;
	int kontiID_city;
	double share_dvsn; // 3.Spalte ist eine Fließkommazahl
	int arcid_ret_flow;
};
</code></pre>
<p>Da dachte ich ein Vektor wäre da besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361456</guid><dc:creator><![CDATA[Onubub]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:12:15 GMT]]></title><description><![CDATA[<p>Man kann sich einen Vector (oder ein eigens äquivalent) auch sortiert halten, und dann ein binäre Suche darauf anwenden. Das macht suchen und drüberiterieren dann recht schnell, aber einfügeoperationen werden dafür dann richtig teuer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361457</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:26:32 GMT]]></title><description><![CDATA[<p>Onubub schrieb:</p>
<blockquote>
<p>epicfail++11 schrieb:</p>
<blockquote>
<p>Onubub schrieb:</p>
<blockquote>
<p>Und was wäre schneller weil ich öfters in großen Vektoren suche! <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>
</blockquote>
<p>Maps verwenden <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 />
In Vektoren suchen ist immer langsam, egal wie du es machst (und alle Varianten sind gleich schnell).</p>
</blockquote>
<p>Da dachte ich ein Vektor wäre da besser.</p>
</blockquote>
<p>Die Entscheidung für/gegen vector hat doch nichts damit zu tun, was du darin speicherst*, sondern was du damit machen willst.<br />
Brauchste einen vector, nimmste einen vector.<br />
Brauchste eine map, nimmste eine map.</p>
<p>*Ja, ja std::list hat einen size overhead per element, der bei kleinen Typen ins Gewicht fällt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361458</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to In Vektor&amp;lt;struct&amp;gt; suchen on Sat, 19 Oct 2013 19:36:49 GMT]]></title><description><![CDATA[<p>Musst du nur nach arcid_dvsn suchen, oder nach allen Eigenschaften (oder kannst du verkraften, nach den anderen langsamer zu suchen)?</p>
<p>Wenn nur nach arcid_dvsn, dann ist eine Map klar am besten.</p>
<p>Wenn nicht, brauchst du ein etwas komplexeres Setup, das etwas Overhead beim Einfügen verursacht und mehr Speicher verbraucht, dafür superschnell im Suchen ist.</p>
<pre><code class="language-cpp">vector&lt;CityWaterMap&gt; BigCityMap; // Vektor zum Speichern der Elemente

map&lt;int, std::size_t&gt; arcid_view; // arcid to vector-Index
map&lt;int, std::size_t&gt; kontiID_view; // kontiID to vector-Index

// Suchen:
int arcid_to_search = ...; // nach dem Suchen wir
CityWaterMap&amp; found = BigCityMap[arcid_view[arcid_to_search&rsqb;&rsqb;; // Gefunden!

// Einfügen:
CityWaterMap newCity;
BigCityMap.push_back(newCity);
arcid_view[newCity.arcid] = BigCityMap.size()-1;
kontiID_view[newCity.kontiID] = BigCityMap.size()-1;
</code></pre>
<p>Die Grundregel im Optimieren für C++ ist: Messen. Nimm erst einmal einen Vektor, das ist am einfachsten. Wenn sich herausstellt, dass der zu langsam ist, dann mach wechsle zu Map. Aber erst, nachdem du nachgewiesen hast, dass es wirklich das Suchen im Vektor ist, was so viel Zeit braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361462</guid><dc:creator><![CDATA[epicfail++11]]></dc:creator><pubDate>Sat, 19 Oct 2013 19:36:49 GMT</pubDate></item></channel></rss>