<?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 veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix]]></title><description><![CDATA[<p>hallo,</p>
<p>ich habe mir folgende map angelegt:</p>
<pre><code class="language-cpp">map&lt;pair&lt;long, long&gt;, double&gt; matrix;
</code></pre>
<p>wobei die beiden long-werte jeweils koordinaten abbilden und der double-wert eben der wert zu den bestimmten koordinaten ist.<br />
jetzt habe ich hunderte von einträgen in meiner map und möchte schauen, ob eine bestimmtes koordinatepaar in meiner map existiert.</p>
<p>ich dachte da an</p>
<pre><code class="language-cpp">map&lt;pair&lt;long, long&gt;, double&gt;::iterator it matrix.find(x, y);
if(it != matrix.end()) {
  // ..
}
</code></pre>
<p>der input bei find() geht leider nicht, ich weiß aber auch nicht wie ich sonst nach dem koordinatenpaar suchen sollte.</p>
<p>ein</p>
<pre><code class="language-cpp">pair&lt;long, long&gt; a = pair&lt;long, long&gt;(2, 3);
</code></pre>
<p>und dann nach a suchen geht auch nicht.</p>
<p>hat jemand eine andere idee?</p>
<p>dankeschön</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192298/in-veschachtelter-map-nach-paar-suchen-map-lt-pair-lt-long-long-gt-double-gt-matrix</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 09:34:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192298.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Sep 2007 16:17:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Wed, 12 Sep 2007 16:17:43 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>ich habe mir folgende map angelegt:</p>
<pre><code class="language-cpp">map&lt;pair&lt;long, long&gt;, double&gt; matrix;
</code></pre>
<p>wobei die beiden long-werte jeweils koordinaten abbilden und der double-wert eben der wert zu den bestimmten koordinaten ist.<br />
jetzt habe ich hunderte von einträgen in meiner map und möchte schauen, ob eine bestimmtes koordinatepaar in meiner map existiert.</p>
<p>ich dachte da an</p>
<pre><code class="language-cpp">map&lt;pair&lt;long, long&gt;, double&gt;::iterator it matrix.find(x, y);
if(it != matrix.end()) {
  // ..
}
</code></pre>
<p>der input bei find() geht leider nicht, ich weiß aber auch nicht wie ich sonst nach dem koordinatenpaar suchen sollte.</p>
<p>ein</p>
<pre><code class="language-cpp">pair&lt;long, long&gt; a = pair&lt;long, long&gt;(2, 3);
</code></pre>
<p>und dann nach a suchen geht auch nicht.</p>
<p>hat jemand eine andere idee?</p>
<p>dankeschön</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364138</guid><dc:creator><![CDATA[einandermappe]]></dc:creator><pubDate>Wed, 12 Sep 2007 16:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Wed, 12 Sep 2007 17:19:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code class="language-cpp">map&lt;pair&lt;long, long&gt;, double&gt;::iterator it = matrix.find(pair&lt;long, long&gt;(x, y));
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">map&lt;pair&lt;long, long&gt;, double&gt;::iterator it = matrix.find(make_pair(x, y));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364155</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 12 Sep 2007 17:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Wed, 12 Sep 2007 17:35:18 GMT]]></title><description><![CDATA[<p>Du mußt einen eigenen Datentypen definieren, und für diesen den Kleiner-Operator &quot;operator&lt;&quot; definieren.<br />
Ungefähr so</p>
<pre><code class="language-cpp">class Koordinate {
public:
  Koordinate (long x, long y) : x_(x), y_(y) {}
  long x_, y_;
}
bool operator&lt; (Koordinate const&amp; lhs, Koordinate const&amp; rhs); // Operator aus der Klasse gezogen

std::map&lt;Koordinate, double&gt; matrix;
</code></pre>
<p>Ergänzung: Oder Du übergibst einen Functor</p>
<pre><code class="language-cpp">class ComparePair {
public:
  bool operator() (std::pair&lt;long, long&gt; lhs, std::pair&lt;long, long&gt; const&amp; rhs);
};
map&lt;pair&lt;long, long&gt;, double, ComparePair&gt; matrix;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364167</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Wed, 12 Sep 2007 17:35:18 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Wed, 12 Sep 2007 17:18:56 GMT]]></title><description><![CDATA[<p>Vergleichsoperatoren sollten global sein. Desweiteren hat pair schon einen operator&lt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364172</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 12 Sep 2007 17:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Wed, 12 Sep 2007 17:33:56 GMT]]></title><description><![CDATA[<p>Ups, das habe ich gerade übersehen. Vermutlich ist es trotzdem gut einen eigenen Vergleichsoperator zu definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364182</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Wed, 12 Sep 2007 17:33:56 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Wed, 12 Sep 2007 19:02:56 GMT]]></title><description><![CDATA[<p>das sieht gut aus, manchmal ist man viel näher dran als man glaubt. der braunsteinsche weg ist jetzt bei mir im einsatz, besten dank! ich glaube für meine anforderung sollte diese lösung dann auch ausreichen, dennoch vielen dank für deine mühe, ~john..</p>
<p>auf wiederlesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364242</guid><dc:creator><![CDATA[keinmehrandermappe]]></dc:creator><pubDate>Wed, 12 Sep 2007 19:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 10:05:10 GMT]]></title><description><![CDATA[<p>~john schrieb:</p>
<blockquote>
<p>Ups, das habe ich gerade übersehen. Vermutlich ist es trotzdem gut einen eigenen Vergleichsoperator zu definieren.</p>
</blockquote>
<p>Wenn dir das Verhalten des eingebauten Operators nicht gefällt kannst du das ja machen. Trotzdem ist es hier nicht nötig dafü eine separate struct zu bauen (obwohl auch kein Problem). Es würde hier reichen einen operator&lt; für pair&lt;long,long&gt; zu erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364547</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 13 Sep 2007 10:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 10:40:19 GMT]]></title><description><![CDATA[<p>einandermappe schrieb:</p>
<blockquote>
<p>ein</p>
<pre><code class="language-cpp">pair&lt;long, long&gt; a = pair&lt;long, long&gt;(2, 3);
</code></pre>
<p>und dann nach a suchen geht auch nicht.</p>
</blockquote>
<p>Kürzer:</p>
<pre><code class="language-cpp">pair&lt;long, long&gt; a(2, 3);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1364562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364562</guid><dc:creator><![CDATA[phalanx-fanboy]]></dc:creator><pubDate>Thu, 13 Sep 2007 10:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 12:25:12 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Es würde hier reichen einen operator&lt; für pair&lt;long,long&gt; zu erzeugen.</p>
</blockquote>
<p>Das wiederum halte ich für keinen guten Gedanken, da man damit das Verhalten des Standard Operators überdeckt. Und wer weiß, ob man pair&lt;long,long&gt; nicht noch an anderer Stelle benötigt. (Überhaupt halte ich es für sinnvoller Koordinaten in einer eigenen Klasse zu verwalten.)</p>
<p>Edit<br />
Überflüssiges gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364601</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Thu, 13 Sep 2007 12:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 12:03:42 GMT]]></title><description><![CDATA[<p>Man muß diesen Operator ja nicht global definieren. Desweiteren überdeckst du hier keinen Operator sondern machst eine Spezialisierung für &lt;long,long&gt;.<br />
Inwiefern unterscheidet sich deine Variante von meiner Zweiten (oder meinst du die verwendung des CopyCtor).<br />
[edit]<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16232">@phalanx-fanboy</a><br />
Das ist natürlich kürzer zu schreiben. Der Compiler macht natürlich aus beiden Varianten den gleichen Code.<br />
[edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364603</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 13 Sep 2007 12:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 12:27:10 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Man muß diesen Operator ja nicht global definieren. Desweiteren überdeckst du hier keinen Operator sondern machst eine Spezialisierung für &lt;long,long&gt;.</p>
</blockquote>
<p>Hm, gefällt mir persönlich nicht so sehr.</p>
<blockquote>
<p>Inwiefern unterscheidet ...</p>
</blockquote>
<p>Irgend wie bin ich beim Lesen der Beiträge in diesem Thread nicht wirklich aufmerksam. Also, nichts für ungut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364624</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Thu, 13 Sep 2007 12:27:10 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 12:32:29 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Vergleichsoperatoren sollten global sein. Desweiteren hat pair schon einen operator&lt;</p>
</blockquote>
<p>Dafür gibt es keinen guten Grund. Normalerweise sollten Operatoren wie andere freie Funktionen sich im assozierten Namensraum der Klasse befinden, zu der sie gehören. Für std::pair wäre das der Namensraum std - und wie richtig erwähnt wurde, existiert dort ein operator&lt; für pair.</p>
<p>In diesem speziellen Falle kann man auf biegen und brechen einen globalen operator&lt; für pair&lt;long,long&gt; definieren, der kein Template ist (in einem anderen Namensraum würde er nicht gefunden werden, denn das Prädikat, dass benutzt wird ist std::less - dieses durchsucht folglich nur den Namensraum ::std, den globalen Namensraum und die assozierten Namensräume der Parameter, die aber hier (mit std::pair&lt;long,long&gt;) mit ::std zusammenfallen). Das ist aber - wie ich schon in einem anderen Thread meinte - zu brutal. Die Regel, dass überladene Operatoren immer ein UDT als Parameter benötigen, findet ihren Grund darin, dass der bereits vorgegeben Teil der Sprache nicht verändert werden kann: Die Semantik von x&lt;y für zwei ints x,y ist vorgegeben und kann nicht verändert werden. Diese Argumentation kann genauso gut auf die Datentypen der Standardbibliothek angewendet werden - allerdings ist die Sprache selbst nicht in der Lage, einen derartigen Schutz zu bieten, mithin sind solche Scheußlichkeiten möglich; trotzdem sollten sie so gut wie immer tabu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364626</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 13 Sep 2007 12:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to in veschachtelter map nach paar suchen: map&amp;lt;pair&amp;lt;long, long&amp;gt;, double&amp;gt; matrix on Thu, 13 Sep 2007 13:16:34 GMT]]></title><description><![CDATA[<p>... das sieht doch nach dünnbesetzten matrizen aus.</p>
<p>ich hab das so implementiert:</p>
<pre><code class="language-cpp">std::vector&lt;std::map&lt;int, float&gt; &gt; matrix;
</code></pre>
<p>... und denke das suchoperationen darauf schneller ausgeführt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364663</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Thu, 13 Sep 2007 13:16:34 GMT</pubDate></item></channel></rss>