<?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[Operatorüberladung bei Map mit Vektoren]]></title><description><![CDATA[<p>Hallo,<br />
ich erstelle mir gerade ein Template, das eine map enthält, in der zugehörige Werte in einem Vektor gespeichert werden.<br />
Allerdings weiß ich bei der Operatorüberladung nicht weiter.<br />
Hier erstmal meine Klasse:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;map&gt;
// Map of Vectors:
// http://schwehr.org/blog/archives/2006-08.html
// http://www.codeguru.com/cpp/tic/tic0232.shtml	
template &lt;typename T, typename U&gt;	// Map mit Schlüssel vom Typ T und Werten im Vector vom Typ U

class MapVec
{
	private:			
		std::map&lt;T, std::vector&lt;U&gt; &gt; mv;		
	public:
		void Add(T key, U val);
		U &amp;operator [](T key);	// Zeiger auf den zugehörigen Vektor zurückgeben
		U operator =(U &amp;val);
};
////////////////////////////////////////////////////////////////////////////
template &lt;typename T, typename U&gt;
void MapVec&lt;T, U&gt;::Add(T key, U val)
{
	std::pair&lt;T, std::vector&lt;U&gt; &gt; entry;
	if (mv.find(key) == mv.end() )				// Prüfen ob Eintrag schon existiert
	{
		// Nicht vorhanden
		entry.first = key;						// Schlüssel
		entry.second.push_back(val);			// Eintrag im Array anhängen
		mv.insert(entry);						// Paar hinzufügen
	}
	else {		
		mv[ key ].push_back( val );				// Schon vorhanden, dann nur Array erweitern
	}
}
////////////////////////////////////////////////////////////////////////////
template &lt;typename T, typename U&gt;
U &amp;MapVec&lt;T, U&gt;::operator [](T key)		
{
	return &amp;mv[key];
}
////////////////////////////////////////////////////////////////////////////
template &lt;typename T, typename U&gt;
U MapVec&lt;T, U&gt;::&amp;operator =(U &amp;val)	//??	
{
	// ???
}
</code></pre>
<p>Nun würde ich gerne den Vektor zu einem Key folgendermaßen auslesen:</p>
<pre><code class="language-cpp">MapVec&lt;std::string, int&gt; IntMap;

IntMap.Add(&quot;A&quot;, 12);
IntMap.Add(&quot;A&quot;, 34);

std::vector&lt;int&gt; iv;
iv = IntMap[&quot;A&quot;];
</code></pre>
<p>Allerdings weiß ich in dem Fall nicht wie ich den Zuweisungsoperator überladen muss, damit das zugehörige Array (oder ein Zeiger darauf) zurückgegeben werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217622/operatorüberladung-bei-map-mit-vektoren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 14:48:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217622.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Jul 2008 11:40:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 11:40:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich erstelle mir gerade ein Template, das eine map enthält, in der zugehörige Werte in einem Vektor gespeichert werden.<br />
Allerdings weiß ich bei der Operatorüberladung nicht weiter.<br />
Hier erstmal meine Klasse:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;map&gt;
// Map of Vectors:
// http://schwehr.org/blog/archives/2006-08.html
// http://www.codeguru.com/cpp/tic/tic0232.shtml	
template &lt;typename T, typename U&gt;	// Map mit Schlüssel vom Typ T und Werten im Vector vom Typ U

class MapVec
{
	private:			
		std::map&lt;T, std::vector&lt;U&gt; &gt; mv;		
	public:
		void Add(T key, U val);
		U &amp;operator [](T key);	// Zeiger auf den zugehörigen Vektor zurückgeben
		U operator =(U &amp;val);
};
////////////////////////////////////////////////////////////////////////////
template &lt;typename T, typename U&gt;
void MapVec&lt;T, U&gt;::Add(T key, U val)
{
	std::pair&lt;T, std::vector&lt;U&gt; &gt; entry;
	if (mv.find(key) == mv.end() )				// Prüfen ob Eintrag schon existiert
	{
		// Nicht vorhanden
		entry.first = key;						// Schlüssel
		entry.second.push_back(val);			// Eintrag im Array anhängen
		mv.insert(entry);						// Paar hinzufügen
	}
	else {		
		mv[ key ].push_back( val );				// Schon vorhanden, dann nur Array erweitern
	}
}
////////////////////////////////////////////////////////////////////////////
template &lt;typename T, typename U&gt;
U &amp;MapVec&lt;T, U&gt;::operator [](T key)		
{
	return &amp;mv[key];
}
////////////////////////////////////////////////////////////////////////////
template &lt;typename T, typename U&gt;
U MapVec&lt;T, U&gt;::&amp;operator =(U &amp;val)	//??	
{
	// ???
}
</code></pre>
<p>Nun würde ich gerne den Vektor zu einem Key folgendermaßen auslesen:</p>
<pre><code class="language-cpp">MapVec&lt;std::string, int&gt; IntMap;

IntMap.Add(&quot;A&quot;, 12);
IntMap.Add(&quot;A&quot;, 34);

std::vector&lt;int&gt; iv;
iv = IntMap[&quot;A&quot;];
</code></pre>
<p>Allerdings weiß ich in dem Fall nicht wie ich den Zuweisungsoperator überladen muss, damit das zugehörige Array (oder ein Zeiger darauf) zurückgegeben werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544130</guid><dc:creator><![CDATA[Thomas_v2.1]]></dc:creator><pubDate>Wed, 09 Jul 2008 11:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 11:51:30 GMT]]></title><description><![CDATA[<p>Es reicht doch wenn du beim operator[] ein std::vector&lt;U&gt; zurück gibst. Oder hab ich das falsch verstanden?</p>
<pre><code class="language-cpp">template &lt;typename T, typename U&gt;
std::vector&lt; U &gt; &amp;MapVec&lt;T, U&gt;::operator [](T key)       
{
    return mv[key];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1544142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544142</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 09 Jul 2008 11:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 11:59:46 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Es reicht doch wenn du beim operator[] ein std::vector&lt;U&gt; zurück gibst. Oder hab ich das falsch verstanden?</p>
</blockquote>
<p>Danke, funktioniert!<br />
Manchmal sieht man den Wald vor lauter Bäumen nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544157</guid><dc:creator><![CDATA[Thomas_v2.1]]></dc:creator><pubDate>Wed, 09 Jul 2008 11:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 12:15:47 GMT]]></title><description><![CDATA[<p>Noch eine Frage in dem Zusammenhang:<br />
Kann ich es irgendwie so umsetzen dass ich mir alle Keys mit den gängigen STL-Iteratoren ausgeben lassen kann?</p>
<p>Also:</p>
<pre><code class="language-cpp">for(MapVec::iterator it = IntMap.begin(); it != IntMap.end(); it++)
{
 ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1544179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544179</guid><dc:creator><![CDATA[Thomas_v2.1]]></dc:creator><pubDate>Wed, 09 Jul 2008 12:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 12:25:04 GMT]]></title><description><![CDATA[<p>Ja, das geht. Aber: Was sind die denn gängigen STL Iteratoren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544192</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 09 Jul 2008 12:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 12:36:15 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Ja, das geht. Aber: Was sind die denn gängigen STL Iteratoren?</p>
</blockquote>
<p>Na ich meinte damit den Zugriff in meinem Beispiel oben.</p>
<p>Ich habe mal das hier probiert:</p>
<pre><code class="language-cpp">public:
		void Add(T key, U val);
		std::vector&lt;U&gt; &amp;operator [](T key);	// Zeiger auf den zugehörigen Vektor zurückgeben		
		typedef std::map&lt;T, std::vector&lt;U&gt; &gt;::iterator 			iterator;
		typedef std::map&lt;T, std::vector&lt;U&gt; &gt;::const_iterator 	const_iterator;		
		iterator begin() 				{ return mv.begin(); }
		iterator end() 					{ return mv.end(); }
		const_iterator begin() const 	{ return mv.begin(); }
		const_iterator end() const 		{ return mv.end(); }
</code></pre>
<p>aber da bekomme ich beim übersetzen den Fehler<br />
&gt; expected `;' before &quot;iterator&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544209</guid><dc:creator><![CDATA[Thomas_v2.1]]></dc:creator><pubDate>Wed, 09 Jul 2008 12:36:15 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung bei Map mit Vektoren on Wed, 09 Jul 2008 12:52:26 GMT]]></title><description><![CDATA[<p>Du hast typename vergessen:</p>
<pre><code class="language-cpp">typedef typename std::map&lt;T, std::vector&lt;U&gt; &gt;::iterator             iterator;
typedef typename std::map&lt;T, std::vector&lt;U&gt; &gt;::const_iterator     const_iterator;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1544236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544236</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 09 Jul 2008 12:52:26 GMT</pubDate></item></channel></rss>