<?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[Designkonzept für Container]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich stehe hier vor einem Problem:<br />
Ich möchte Objekte in einen Container einlesen. Die Objekte haben 3 Eigenschaften (alles zahlen), mit denen Sie in der container indiziert werden müssen.<br />
Im Moment mache ich es so, dass ich aus den 3 Eigenschaften einen einmaligen Hashwert berechne und dann in einer std::map&lt;int, object&gt; speichere.<br />
Gibt es eine elegantere lösung? Also am besten wäre so eine Lösung:</p>
<pre><code class="language-cpp">CONTAINERTYPE &lt; int, int, int, T &gt; container;

container.insert(4, 6, 2, mein_object);

std::cout&lt;&lt; container(4,6,2); //gibt mein object aus
</code></pre>
<p>Wie würdet ihr so ein Problem angehen? Gleich eine eigene Containerklasse zu schreiben möchte ich gerne vermeiden</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270503/designkonzept-für-container</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 04:43:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270503.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Jul 2010 18:13:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:13:39 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich stehe hier vor einem Problem:<br />
Ich möchte Objekte in einen Container einlesen. Die Objekte haben 3 Eigenschaften (alles zahlen), mit denen Sie in der container indiziert werden müssen.<br />
Im Moment mache ich es so, dass ich aus den 3 Eigenschaften einen einmaligen Hashwert berechne und dann in einer std::map&lt;int, object&gt; speichere.<br />
Gibt es eine elegantere lösung? Also am besten wäre so eine Lösung:</p>
<pre><code class="language-cpp">CONTAINERTYPE &lt; int, int, int, T &gt; container;

container.insert(4, 6, 2, mein_object);

std::cout&lt;&lt; container(4,6,2); //gibt mein object aus
</code></pre>
<p>Wie würdet ihr so ein Problem angehen? Gleich eine eigene Containerklasse zu schreiben möchte ich gerne vermeiden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925775</guid><dc:creator><![CDATA[Konzept?!]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:13:39 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:17:26 GMT]]></title><description><![CDATA[<p>Theoretisch könnte man natürlich eine dreifach verschachtelte Map nehmen, aber in der Praxis dürfte die Lösung mit dem Hashwert weit überlegen sein. Ich würde mir einen Wrapper für die Map schreiben, welche automatisch die Hash-Operationen durchführt, so dass man die Map dann so benutzen kann, wie man es kennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925777</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:20:55 GMT]]></title><description><![CDATA[<p>Fasse die int-Tripel in eine Klasse zusammen und definiere operator&lt;, damit kannst du sie als Key in der map verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925780</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:20:55 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:30:33 GMT]]></title><description><![CDATA[<p>So?</p>
<pre><code>#include &lt;map&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

struct Key
{
  int a;
  int b;
  int c;

  Key( int a, int b, int c ) : a(a), b(b), c(c) {}

  bool operator&lt; ( const Key&amp; rhs ) const 
  {
    return a &lt; rhs.a 
      ||
      ( a == rhs.a &amp;&amp; b &lt; rhs.b )
      ||
      ( a == rhs.a &amp;&amp; b == rhs.b &amp;&amp; c &lt; rhs.c );
  }
};

int main()
{
  std::map&lt;Key, std::string&gt; m;

  m[ Key( 1, 2, 3 ) ] = &quot;Hallo&quot;;
  m[ Key( 4, 5, 6 ) ] = &quot;Welt&quot;;

  std::cerr &lt;&lt; m[ Key( 1, 2, 3 ) ] &lt;&lt; &quot; &quot; &lt;&lt; m[ Key( 4, 5, 6 ) ] &lt;&lt; std::endl;
}
</code></pre>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925783</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:30:33 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:30:54 GMT]]></title><description><![CDATA[<p>WOW! Das nenne ich mal schnelle Antworten!<br />
Bisher gefällt mir der Ansatz von SeppJ ganz gut, ungefähr so:</p>
<pre><code class="language-cpp">typedef std::map&lt;int, object&gt; my_map;

void add_obj(int a, int b, int c, object o, my_map&amp; m)
{
   m.insert&lt;std::make_pair(a*100+b*10+c, o);
}

object get_obj(int a, int b, int c, const my_map&amp; m)
{
   return m[a*100+b*10+c];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1925784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925784</guid><dc:creator><![CDATA[Konzept?!]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:39:11 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">typedef std::map&lt;int, object&gt; my_map;

void add_obj(int a, int b, int c, object o, my_map&amp; m)
{
   m.insert&lt;std::make_pair(a*100+b*10+c, o);
}

object get_obj(int a, int b, int c, const my_map&amp; m)
{
   return m[a*100+b*10+c];
}
</code></pre>
</blockquote>
<p>Ich hoffe deine Zahlen sind nur einstellig, sonst ist (1,1,1) und (1,0,11) Identisch ... dann könntest du ganz auf das Wrappen der Map verzichten und einfach einen int als key verwenden.<br />
Abgesehen davon verstehe ich das make_pair nicht ... du brauchst einen int und ein Objekt ... also eher <code>m.insert(a*100+b*10+c, o)</code> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925786</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:39:11 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Tue, 13 Jul 2010 18:47:27 GMT]]></title><description><![CDATA[<p>Mit manni66s Lösung benötigst du keine Wrapperklassen und hast keinerlei Bereichsrestriktionen für deine Schlüsselteile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925790</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Tue, 13 Jul 2010 18:47:27 GMT</pubDate></item><item><title><![CDATA[Reply to Designkonzept für Container on Wed, 14 Jul 2010 06:08:57 GMT]]></title><description><![CDATA[<p>padreigh schrieb:</p>
<blockquote>
<p>Abgesehen davon verstehe ich das make_pair nicht ... du brauchst einen int und ein Objekt ... also eher <code>m.insert(a*100+b*10+c, o)</code> ...</p>
</blockquote>
<p>Das make_pair benötigst du an der map.insert-Funktion, da diese zum einfügen ein &quot;pair&quot; möchte. Aber wie oben war es falsch sollte eigentlich so geschrieben werden:</p>
<pre><code class="language-cpp">m.insert( make_pair( a*100+b*10+c, 0 ) )
</code></pre>
<p>Mfg marco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925929</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Wed, 14 Jul 2010 06:08:57 GMT</pubDate></item></channel></rss>