<?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[map&amp;lt;char,int&amp;gt; Defaultwert ändern?]]></title><description><![CDATA[<p>Ich habe eine map</p>
<pre><code class="language-cpp">map&lt;char,int&gt; m
</code></pre>
<p>und möchte den Standartwert, also den Wert, der in</p>
<pre><code class="language-cpp">m[key]
</code></pre>
<p>falls key noch nicht besetzt ist zurückgegeben wird, ändern.</p>
<p>Wenn ich mich recht erinnere ist map so implementiert, dass sie dabei</p>
<pre><code class="language-cpp">T()
</code></pre>
<p>verwendet.</p>
<p>Ist es wirklich der einzige Weg eine Wrapper Klasse für int zu schreiben und dort einen angepassten Defaultkonstruktor anzubieten?</p>
<p>grüße und dank im voraus<br />
~nirsaja</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141259/map-lt-char-int-gt-defaultwert-ändern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 11:05:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141259.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Mar 2006 14:53:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Mon, 20 Mar 2006 14:53:22 GMT]]></title><description><![CDATA[<p>Ich habe eine map</p>
<pre><code class="language-cpp">map&lt;char,int&gt; m
</code></pre>
<p>und möchte den Standartwert, also den Wert, der in</p>
<pre><code class="language-cpp">m[key]
</code></pre>
<p>falls key noch nicht besetzt ist zurückgegeben wird, ändern.</p>
<p>Wenn ich mich recht erinnere ist map so implementiert, dass sie dabei</p>
<pre><code class="language-cpp">T()
</code></pre>
<p>verwendet.</p>
<p>Ist es wirklich der einzige Weg eine Wrapper Klasse für int zu schreiben und dort einen angepassten Defaultkonstruktor anzubieten?</p>
<p>grüße und dank im voraus<br />
~nirsaja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020359</guid><dc:creator><![CDATA[nirsaja]]></dc:creator><pubDate>Mon, 20 Mar 2006 14:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Mon, 20 Mar 2006 15:42:23 GMT]]></title><description><![CDATA[<p>Ich weiß leider auch keine super Lösung,</p>
<ol>
<li>bevor ich mir einen Int wrapper schreibe würde ich mir lieber eine eigene map ableiten, die dann map&lt;&gt;::key_type im Konstuktor mitbekommt und damit die &quot;leeren&quot; keys initialisiert.</li>
<li>Wieso kuckt man nicht vorher mit find ob es den key schon gibt?</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1020402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020402</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 20 Mar 2006 15:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Mon, 20 Mar 2006 15:59:18 GMT]]></title><description><![CDATA[<blockquote>
<ol start="2">
<li>Wieso kuckt man nicht vorher mit find ob es den key schon gibt?</li>
</ol>
</blockquote>
<p>Macht das die map auch, wenn sie den Wert zurückgibt?<br />
Ansonsten ist das zu langsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020416</guid><dc:creator><![CDATA[nirsaja]]></dc:creator><pubDate>Mon, 20 Mar 2006 15:59:18 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Mon, 20 Mar 2006 17:19:27 GMT]]></title><description><![CDATA[<p>nirsaja schrieb:</p>
<blockquote>
<blockquote>
<ol start="2">
<li>Wieso kuckt man nicht vorher mit find ob es den key schon gibt?</li>
</ol>
</blockquote>
<p>Macht das die map auch, wenn sie den Wert zurückgibt?<br />
Ansonsten ist das zu langsam.</p>
</blockquote>
<p>Natürlich sucht sie den Wert. Woher soo sie ihn denn haben? Allerdings würde ich nach dem find natürlich direkt den iterator verwenden und nicht nochmal den operator[] aufrufen, da das zu einer weiteren Suche führen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020472</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Mon, 20 Mar 2006 17:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Mon, 20 Mar 2006 17:56:18 GMT]]></title><description><![CDATA[<p>find() gibt aber end() zurück falls der Schlüssel nicht existiert - und dann muß insert() die Einfügeposition wieder suchen.</p>
<p>Prinzipiell kann die map-implementaiton das &quot;interne&quot; find-Ergebnis nutzen um sich den zweiten lookup zu sparen. Es gibt aber mindestens eine Implementation, die das nicht tut.<br />
---------</p>
<p>Wieviele Elemente soll deine map ca. enthalten? Soll char irgendwann mal durch wide char ersetzt werden?</p>
<p>mit einem int[256] belegst du 1KB (32bit), das ist noh hinreichend cache-effektiv (break even bei ca. 64 Einträgen), hat einen rasanten lookup und kann ganz einfach mit einem Defaultwert vorbelegt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020492</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 20 Mar 2006 17:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Mon, 20 Mar 2006 20:16:52 GMT]]></title><description><![CDATA[<p>der funtion, die zu nutzen ist, ist nat. lower_bound und nicht find. der iterator, der zurückgegeben wird ist dann entweder das gesuchte element oder die stelle, an der es eingefügt werden müsste. im gegensatz zu find wird op&lt; hier nicht zweimal angewendet, es finden folglich keine überflüssigen operationen statt. bei einem derart eingeschränkten schlüsselbereich gibt es allerdings kaum gründe, kein array oder vector zu benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020649</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 20 Mar 2006 20:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Tue, 21 Mar 2006 09:52:35 GMT]]></title><description><![CDATA[<blockquote>
<p>der funtion, die zu nutzen ist, ist nat. lower_bound und nicht find.</p>
</blockquote>
<p>Exakt. Und wie das in Code aussieht, zeigt Scott Meyers in &quot;Effective STL - Item 24&quot;</p>
<pre><code class="language-cpp">template &lt;class MapType, class KeyArgType, class ValueArgType&gt;
typename MapType::iterator efficientAddOrUpdate(MapType&amp; m, const KeyArgType&amp; k, const ValueArgType&amp; v) {
  typename MapType::iterator lb = m.lower_bound(k);

  if (lb != m.end() &amp;&amp; !(m.key_comp()(k, lb-&gt;first)) { // update existing
    lb-&gt;second = v;
    return lb;
  }
  else {  // insert new
    typedef typename MapType::value_type MVT;
    return m.insert(lb, MVT(k, v));
  }

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1020923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020923</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 21 Mar 2006 09:52:35 GMT</pubDate></item><item><title><![CDATA[Reply to map&amp;lt;char,int&amp;gt; Defaultwert ändern? on Tue, 21 Mar 2006 18:43:18 GMT]]></title><description><![CDATA[<p>(OT)<br />
gibt es einen Grund, das KeyArgType und ValueArgType template-parameter sind?</p>
<p>Folgendes sollte doch auch:</p>
<pre><code class="language-cpp">template &lt;class MapType&gt;
typename MapType::iterator efficientAddOrUpdate(MapType&amp; m, typename MapType::key_type const &amp; k, typename MapType::arg_type const &amp; v)
</code></pre>
<p>oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021255</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 21 Mar 2006 18:43:18 GMT</pubDate></item></channel></rss>