<?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[Unklarheit zur std::map definition]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bekomme es einfach nicht zustande Klarheit über das genaue Verhalten beim Einfügen von Elementen in eine std::map zu erlangen.</p>
<pre><code class="language-cpp">...
typedef struct S
{
  int a,b,c;
  bool operator () (const S&amp; l, const S&amp; r) const {return !memcmp(...);}
};

std::map&lt;S, K*, S&gt; karte;

...
S       s = {1,2,3};
void*   p = GibMirEinZeiger();

karte[s] = p;
</code></pre>
<p>So wie ich das heraugelesen habe, nutzt std::map das Funktionobjekt um festzustellen ob der Schlüssel l (im Beispiel) vor dem Schlüssel r eingefügt werden soll.</p>
<p>Ist also der erste Paramter des Funktionsobjektes der Schlüssel, der hinzugefügt wird?<br />
Wie erfährt std::map ob die Schlüssel gleich sind?</p>
<p>Währe wirklich toll wenn mir da jemand weiterhelfen könnte!</p>
<p>PS.: Wo kann man allgemein solche Dinge über die STL am besten erfahren? Google lieferte mir da kaum taugliche Seiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251863/unklarheit-zur-std-map-definition</link><generator>RSS for Node</generator><lastBuildDate>Tue, 26 May 2026 14:30:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251863.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Oct 2009 23:39:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Sun, 11 Oct 2009 23:39:25 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bekomme es einfach nicht zustande Klarheit über das genaue Verhalten beim Einfügen von Elementen in eine std::map zu erlangen.</p>
<pre><code class="language-cpp">...
typedef struct S
{
  int a,b,c;
  bool operator () (const S&amp; l, const S&amp; r) const {return !memcmp(...);}
};

std::map&lt;S, K*, S&gt; karte;

...
S       s = {1,2,3};
void*   p = GibMirEinZeiger();

karte[s] = p;
</code></pre>
<p>So wie ich das heraugelesen habe, nutzt std::map das Funktionobjekt um festzustellen ob der Schlüssel l (im Beispiel) vor dem Schlüssel r eingefügt werden soll.</p>
<p>Ist also der erste Paramter des Funktionsobjektes der Schlüssel, der hinzugefügt wird?<br />
Wie erfährt std::map ob die Schlüssel gleich sind?</p>
<p>Währe wirklich toll wenn mir da jemand weiterhelfen könnte!</p>
<p>PS.: Wo kann man allgemein solche Dinge über die STL am besten erfahren? Google lieferte mir da kaum taugliche Seiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791154</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Sun, 11 Oct 2009 23:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Sun, 11 Oct 2009 23:44:41 GMT]]></title><description><![CDATA[<p>würde der code mir auf arbeit begegnen, würde ich mich erstmal nach der versteckten kamera umdrehen.<br />
stl ohne buch geht kaum. nachher ist <a href="http://www.cppreference.com/wiki/stl/map/start" rel="nofollow">http://www.cppreference.com/wiki/stl/map/start</a> ideal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791155</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 11 Oct 2009 23:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Sun, 11 Oct 2009 23:53:02 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>würde der code mir auf arbeit begegnen, würde ich mich erstmal nach der versteckten kamera umdrehen.</p>
</blockquote>
<p>Wie meinst du das?</p>
<blockquote>
<p>stl ohne buch geht kaum. nachher ist <a href="http://www.cppreference.com/wiki/stl/map/start" rel="nofollow">http://www.cppreference.com/wiki/stl/map/start</a> ideal.</p>
</blockquote>
<p>Danke, aber das hilft mir überhaupt nicht weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791159</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Sun, 11 Oct 2009 23:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 00:28:44 GMT]]></title><description><![CDATA[<p>Lösung selbst gefunden:</p>
<p>&quot;Two objects x and y are equivalent if both f(x, y) and f(y, x) are false. Note that an object is always (by the irreflexivity invariant) equivalent to itself.&quot;<br />
<a href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html" rel="nofollow">http://www.sgi.com/tech/stl/StrictWeakOrdering.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791161</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 00:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 11:04:52 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>würde der code mir auf arbeit begegnen, würde ich mich erstmal nach der versteckten kamera umdrehen.</p>
</blockquote>
<p>Wie meinst du das?</p>
</blockquote>
<p>weil das nicht viel mit C++ zu tun hat, was du dort machst^^</p>
<pre><code class="language-cpp">typedef struct S
{
  int a,b,c;
  bool operator () (const S&amp; l, const S&amp; r) const {return !memcmp(...);}
};
</code></pre>
<p>das typedef ist falsch - wundert mich auch gerad, dass das überhaupt kompiliert...<br />
der name ist auch iwie nichts sagend, meinst du nicht auch?!<br />
nen konstruktor wäre auch klasse<br />
den op() in der klasse an sich zu überladen ist auch keine gute idee<br />
wenn es sinn ergibt, nen op&lt; zu erstellen, dann mach das - ansonsten nimm nen extra struct als comparer</p>
<pre><code class="language-cpp">std::map&lt;S, K*, S&gt; karte;
</code></pre>
<p>wie gesagt - entweder<br />
<code>std::map&lt;S, K*&gt; karte;</code> und op&lt; überladen<br />
oder<br />
<code>std::map&lt;S, K*, S_cmp&gt; karte;</code> (wenn S nicht logisch sortierbar ist) und in S_cmp den op() überladen</p>
<p>Jz könnte man noch diskutieren, wieso du rohe Zeiger verwendest - aber das kannst du vll wirklich nicht beeinflussen...</p>
<pre><code class="language-cpp">S       s = {1,2,3};
void*   p = GibMirEinZeiger();

karte[s] = p;
</code></pre>
<p>wieso void*?</p>
<p>retter schrieb:</p>
<blockquote>
<blockquote>
<p>stl ohne buch geht kaum. nachher ist <a href="http://www.cppreference.com/wiki/stl/map/start" rel="nofollow">http://www.cppreference.com/wiki/stl/map/start</a> ideal.</p>
</blockquote>
<p>Danke, aber das hilft mir überhaupt nicht weiter.</p>
</blockquote>
<p>ist aber die beste dokumentation, die es gibt (zumindest hab ich noch keine andere gesehen, die so toll ist und zu nahezu jeder funktion nen bsp. bietet)</p>
<p>die map bekommt die äquivalenz (wie auch jeder andere stl-container) raus, indem sie auf x&lt;y und y&lt;x prüft.<br />
strict weak ordering hat nur teilweise was damit zu tun - das sagt nämlich nur aus, dass für x&lt;y nicht auch x&gt;y gelten darf.<br />
und das aus x&lt;y und y&lt;z auch x&lt;z folgen muss.<br />
das steht so gar auch auf der von dir geposteten seite:<br />
<em>a is less than b then b is not less than a, if a is less than b and b is less than c then a is less than c, and so on.</em><br />
hat imho aber nicht so viel mit deiner wirklichen frage zu tun...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791300</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 12 Oct 2009 11:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 15:37:45 GMT]]></title><description><![CDATA[<p>Also ich komme noch immer nicht klar:</p>
<pre><code class="language-cpp">...
struct Schlüssel
{
   int a,b,c;
};
struct Schlüssel_Vergleich
{
  bool operator () (const Schlüssel* links, const Schlüssel* rechts) const
  {
     return links.a != rechts.a || links.b != rechts.b || links.c != rechts.c;
  }
};

map&lt;const Schlüssel*, Wert*, Schlüssel_Vergleich&gt; karte;

for(...)
{
  ...
  map&lt;const Schlüssel*, Wert*, Schlüssel_Vergleich&gt;::iterator suchergebnis;
  suchergebnis = karte.find(meinSchlüssel);

  pair&lt;map&lt;const Schlüssel*, Wert*, Schlüssel_Vergleich&gt;::iterator, bool&gt; drin;
  drin = karte.insert(pair&lt;const Schlüssel*, Wert*&gt;(meinSchlüssel, meinWert));

  if(drin.second == false &amp;&amp; suchergebnis == karte.end())
    bool retterVerstehtDasNicht = true;
}
</code></pre>
<p>Also warum werden da Einträge nicht gefunden, obwohl map::insert false liefert?</p>
<p>Vielen Dank für Eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791458</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 15:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 15:51:43 GMT]]></title><description><![CDATA[<p>Gib uns doch mal nen kleines, kompilierbares Beispiel, und nicht so etwas aus dem Kopf runtergeschriebenes mit Üs in Klassennamen, Syntaxfehlern, u.s.w.</p>
<p>Tipp1: Versuche die Benutzung des unären *-Operators einzuschränken <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="😉"
    /> (weniger Zeiger)<br />
Tipp2: <code>typedef</code> kann praktisch sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791466</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 12 Oct 2009 15:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 18:04:06 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Tipp1: Versuche die Benutzung des unären *-Operators einzuschränken <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="😉"
    /> (weniger Zeiger)</p>
</blockquote>
<p>Warum sollte es besser sein hier Werte über call by value zu übergeben?</p>
<p>Bei dem Versuch ein compilierbares Beispiel zu schreiben bin ich auf ein neues Problem gestoßen:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;map&gt;

using namespace std;

struct Key {int a,b,c;};
struct Key_Cmp
{
  bool operator () (const Key* links, const Key* rechts) const
  {
     return links-&gt;a != rechts-&gt;a || links-&gt;b != rechts-&gt;b || links-&gt;c != rechts-&gt;c;
  }
};

struct Value{int x,y,z;};

typedef map&lt;const Key*, Value*, Key_Cmp&gt; Karte;
Karte karte;

int _tmain(int argc, _TCHAR* argv[])
{
	Key	keyA	= {1,2,3};
	Key	keyB	= {1,3,3};
	Value  value   = {4,5,6};

	karte[&amp;keyA] = &amp;value;

	Karte::iterator suchergebnis;
	suchergebnis = karte.find(&amp;keyB);  // &lt;---

	pair&lt;Karte::iterator, bool&gt; drin;
	drin = karte.insert(pair&lt;const Key*, Value*&gt;(&amp;keyB, &amp;value));

	if(drin.second == false &amp;&amp; suchergebnis == karte.end())
		bool retterVerstehtDasNicht = true;

	return 0;
}
</code></pre>
<p>Bei dem markiertem find schlägt eine assertion fehl: &quot;invalid operator &lt;&quot;<br />
Ich dachte es reicht hier das Funktionsobjekt? Und warum wird das nicht zur compile-Zeit angemeckert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791555</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 18:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 18:23:28 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Tipp1: Versuche die Benutzung des unären *-Operators einzuschränken <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="😉"
    /> (weniger Zeiger)</p>
</blockquote>
<p>Warum sollte es besser sein hier Werte über call by value zu übergeben?</p>
</blockquote>
<p>Kommt drauf an, was Du machen willst. Die Schlüssel-Objekte in einer map sind üblicherweise klein und handlich, schnell kopierbar. Das ist bei Dir auch der Fall. Wenn Du allerdings Zeiger als Schlüssel verwendest, kannst Du das, worauf sie zeigen, immernoch verändern und die map &quot;durcheinander bringen&quot;. Außerdem musst Du Dich dann um die Verwaltung dieser Objekte selbst kümmern, also zusehen, dass die Zeiger nicht ungültig werden oder Du kein Speicherleck bekommst.</p>
<p>retter schrieb:</p>
<blockquote>
<p>Bei dem Versuch ein compilierbares Beispiel zu schreiben bin ich auf ein neues Problem gestoßen:</p>
<pre><code class="language-cpp">...
struct Key {int a,b,c;};
struct Key_Cmp
{
  bool operator () (const Key* links, const Key* rechts) const
  {
     return links-&gt;a != rechts-&gt;a || links-&gt;b != rechts-&gt;b || links-&gt;c != rechts-&gt;c;
  }
};
...
</code></pre>
<p>Bei dem markiertem find schlägt eine assertion fehl: &quot;invalid operator &lt;&quot;<br />
Ich dachte es reicht hier das Funktionsobjekt? Und warum wird das nicht zur compile-Zeit angemeckert?</p>
</blockquote>
<p>Dem Compiler ist es ziemlich egal, was Deine Funktion ausrechnet. std::map erwartet, dass die Funktion eine vernünftige, &quot;&lt;&quot;-artige Ordnungsrelation ist. Das ist sie aber in Deinem Fall nicht. std::map stellt während das Programm läuft fest, dass die boolschen Werte, die Du da berechnest, einer &quot;&lt;&quot;-artigen Relation widersprechen. Was Du da geschrieben hast, ist eigentlich so etwas wie &quot;!=&quot;.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791564</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 12 Oct 2009 18:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 18:40:45 GMT]]></title><description><![CDATA[<p>Aber ist die Äquivalenzanforderung nicht damit erfüllt, nur dass eben keine echte Sortierung erfolgt?<br />
Wenn nicht, wie lautet die Definition?</p>
<p>Muss ich daher auf eine Hashtabelle umsteigen?<br />
unordered_map ist mit meinem compiler (ICC 10) mit Laufzeittests extrem langsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791575</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 18:40:45 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 19:02:40 GMT]]></title><description><![CDATA[<p>Wie wär's mit RTFM !? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>std::map will sortieren. Sortieren machen wir in C++ über eine strikte, schwache Ordnungsrelation (wie &quot;&lt;&quot; eine ist). Aus einer solchen Relation leitet sich std::map alles ab, inklusive der Äquivalenz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791591</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 12 Oct 2009 19:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 20:01:47 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht warum z.B. das keine strikte, schwache Ordnung ist:</p>
<pre><code class="language-cpp">struct Key_Cmp
{
  bool operator () (const Key* links, const Key* rechts) const
  {
	  if(links-&gt;a &lt; rechts-&gt;a) return true;
	  if(links-&gt;b &lt; rechts-&gt;b) return true;
	  return links-&gt;c &lt; rechts-&gt;c;
  }
};
</code></pre>
<p>Jedenfalls fällt da wieder die genannte Assertion fehl. Aber diesmal nur wenn ich ein Element mit einem Wert a einfügen will, der bereits vorhandenen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791618</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 20:08:19 GMT]]></title><description><![CDATA[<p>Probier mal das hier aus:</p>
<pre><code class="language-cpp">Key link = {2,0,1};   
  Key rech = {1,0,2};
</code></pre>
<p>Was <em>soll</em> Deine Vergleichsfunktion da zurückgeben und was gibt sie <em>wirklich</em> zurück?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791626</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 20:08:54 GMT]]></title><description><![CDATA[<p>OK, mir fehlt einfach der Schlaf.<br />
So muss es natürlich aussehen:</p>
<pre><code class="language-cpp">struct Key_Cmp
{
  bool operator () (const Key* links, const Key* rechts) const
  {
	  if(links-&gt;a &lt; rechts-&gt;a) return true;
	  if(links-&gt;a &gt; rechts-&gt;a) return false;
	  if(links-&gt;b &lt; rechts-&gt;b) return true;
	  if(links-&gt;b &gt; rechts-&gt;b) return false;
	  return links-&gt;c &lt; rechts-&gt;c;
  }
};
</code></pre>
<p>Lohnt es sich bei so etwas bereits eine hash_map / unsorted_map zu verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791627</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:08:54 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 20:33:14 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Lohnt es sich bei so etwas bereits eine hash_map / unsorted_map zu verwenden?</p>
</blockquote>
<p>K.A. Wenn Du aber schon willig bist, unordered_map zu benutzen, kannst Du ja auch als Schlüssel einfach tuple&lt;int,int,int&gt; nehmen. Tuple kommt schon mit vorgefertigten Vergleichsoperatoren (lexikalische Sortierung) daher. <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>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791636</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 20:21:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct cmp
{
  bool operator() (const Key* lhs, const Key* rhs) const
  {
    if(lhs-&gt;a != rhs-&gt;a)
      return lhs-&gt;a &lt; rhs-&gt;a;
    if(lhs-&gt;b != rhs-&gt;b)
      return lhs-&gt;b &lt; rhs-&gt;b;
    return lhs-&gt;c &lt; rhs-&gt;c;
  }
};
</code></pre>
<p>finde ich übersichtlicher...</p>
<p>kanns sein, dass du noch immer nicht geschrieben hast, _was_ du eigentlich machen möchtest?<br />
wie sollen wir dir sagen, ob du es auch so und so machen kannst, wenn du nicht sagst, was du machen willst...<br />
also tu das einfach mal und ich bin mir sicher, dass es ne hübschere lösung gibt, als das, was du bisher gepostet hast...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791640</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 12 Oct 2009 20:21:57 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 21:18:00 GMT]]></title><description><![CDATA[<p>Ich muß Objektzeiger über einen komplexen Schlüssel referenzieren.<br />
Der Schlüssel ist in meinem ersten Problemfall ist wie im Beispiel ein Tripel vom Typ &lt;int, int, int&gt;.</p>
<p>Als nächstes muss ich die gleichen Objekte mit einem Schlüssel vom Typ &lt;int, int, const char*&gt; referenzieren.<br />
Kann man für den Vergleich der Zeichenkette strcmp benutzen, daher erfüllt es die strikte, schwache Ordnungsrelation?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791669</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 21:18:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 21:39:59 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct cmp
{
  bool operator() (const Key* lhs, const Key* rhs) const
  {
    if(lhs-&gt;a != rhs-&gt;a)
      return lhs-&gt;a &lt; rhs-&gt;a;
    if(lhs-&gt;b != rhs-&gt;b)
      return lhs-&gt;b &lt; rhs-&gt;b;
    return lhs-&gt;c &lt; rhs-&gt;c;
  }
};
</code></pre>
<p>finde ich übersichtlicher...</p>
</blockquote>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791677</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Oct 2009 21:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 21:51:53 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Als nächstes muss ich die gleichen Objekte mit einem Schlüssel vom Typ &lt;int, int, const char*&gt; referenzieren.<br />
Kann man für den Vergleich der Zeichenkette strcmp benutzen, daher erfüllt es die strikte, schwache Ordnungsrelation?</p>
</blockquote>
<p>Kann ich selber beantworten: ja klar.</p>
<p>Nochmal danke an alle die bei der schweren Geburt geholfen haben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791680</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 21:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 21:56:51 GMT]]></title><description><![CDATA[<p>Noch eine Frage, warum bietet es sich wie behauptet nicht an, den Funktionoperator () für den Vergleich gleich in der Klasse/Struktur zu definieren, wo beide Argumente von dem selben Typ sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791681</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 21:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 22:03:46 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Noch eine Frage, warum bietet es sich wie behauptet nicht an, den Funktionoperator () für den Vergleich gleich in der Klasse/Struktur zu definieren, wo beide Argumente von dem selben Typ sind?</p>
</blockquote>
<p>In der Klasse kannste gerne den op&lt; definieren. Wozu da den op()?<br />
Das mit dem op() ist gut geeignet, daß Du mal nach dem und mal nach anderem sortzieren kanns.</p>
<pre><code class="language-cpp">sort(leute.begin(),leute.end(),cmp_nachPostleitzahl);
ausgabe();
sort(leute.begin(),leute.end(),cmp_nachName);
ausgabe();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1791687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791687</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Oct 2009 22:03:46 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 22:17:28 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Noch eine Frage, warum bietet es sich wie behauptet nicht an, den Funktionoperator () für den Vergleich gleich in der Klasse/Struktur zu definieren, wo beide Argumente von dem selben Typ sind?</p>
</blockquote>
<p>beide argumente vom selben typ? Oo was hat das damit zu tun, wo die fkt deklariert wurde?<br />
ich hab die vermutung, dass du iwie keine ahnung hast&gt;.&lt;<br />
aber wenn du dein problem gelöst hast, ist ja alles in ordnung...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791690</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 12 Oct 2009 22:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 22:26:44 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>retter schrieb:</p>
<blockquote>
<p>Noch eine Frage, warum bietet es sich wie behauptet nicht an, den Funktionoperator () für den Vergleich gleich in der Klasse/Struktur zu definieren, wo beide Argumente von dem selben Typ sind?</p>
</blockquote>
<p>In der Klasse kannste gerne den op&lt; definieren. Wozu da den op()?<br />
Das mit dem op() ist gut geeignet, daß Du mal nach dem und mal nach anderem sortzieren kanns.</p>
<pre><code class="language-cpp">sort(leute.begin(),leute.end(),cmp_nachPostleitzahl);
ausgabe();
sort(leute.begin(),leute.end(),cmp_nachName);
ausgabe();
</code></pre>
</blockquote>
<p>Danke. Ist es für den Compiler dann genauso möglich mittels inlining zu optimieren?<br />
Ich frage micht weiterhin ob man für meine Problembeispiele nicht lieber gleich eine Hashtabelle nehmen sollte.</p>
<p>unskilled schrieb:</p>
<blockquote>
<p>beide argumente vom selben typ? Oo was hat das damit zu tun, wo die fkt deklariert wurde?</p>
</blockquote>
<p>Weil ich den Funktor zu dieser Klasse logisch zuordnen kann?</p>
<blockquote>
<p>ich hab die vermutung, dass du iwie keine ahnung hast&gt;.&lt;</p>
</blockquote>
<p>Wer hat das schon Meister?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791694</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Mon, 12 Oct 2009 22:26:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Mon, 12 Oct 2009 22:34:06 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Ist es für den Compiler dann genauso möglich mittels inlining zu optimieren?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Ich frage micht weiterhin ob man für meine Problembeispiele nicht lieber gleich eine Hashtabelle nehmen sollte.</p>
</blockquote>
<p>Ich auch. Aber das hängt dann doch von den zu erwartenden Daten ab und lässt sich im Voraus nicht gut abschätzen. Mach doch einfach beides und miss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1791699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1791699</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 12 Oct 2009 22:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Sat, 12 Jul 2014 22:14:44 GMT]]></title><description><![CDATA[<p>Nur noch eine kleine Frage...ist es legal memcmp im operator&lt; für std::map zu verwenden? (im Sinne der geforderten Ordnung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408333</guid><dc:creator><![CDATA[retter]]></dc:creator><pubDate>Sat, 12 Jul 2014 22:14:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarheit zur std::map definition on Sun, 13 Jul 2014 00:03:09 GMT]]></title><description><![CDATA[<p>retter schrieb:</p>
<blockquote>
<p>Nur noch eine kleine Frage...ist es legal memcmp im operator&lt; für std::map zu verwenden? (im Sinne der geforderten Ordnung)</p>
</blockquote>
<p>Nach fünf Jahren hast du deinen alten Thread rausgesucht um in ihm zu posten statt einfach einen neuen aufzumachen? lol</p>
<p>Hoffentlich hab ich dich richtig verstanden:<br />
Ja, ist erlaubt (sofern du im richtigen Speicherbereich vergleichst). Jedoch kannst du deine Elemente ja bestimmt auch normal vergleichen statt mit <code>memcmp</code> , oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408342</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Sun, 13 Jul 2014 00:03:09 GMT</pubDate></item></channel></rss>