<?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[[STL] Map in Vector &amp;quot;swappen&amp;quot; ??]]></title><description><![CDATA[<p>hi,</p>
<p>möchte die werte einer map in einen vector kopieren. gibts da sowas wie swap oder muss ich in ner schlaufe drüber und einzeln kopieren?</p>
<p>danke schomaal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156806/stl-map-in-vector-quot-swappen-quot</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 23:59:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156806.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Aug 2006 13:02:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 13:02:54 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>möchte die werte einer map in einen vector kopieren. gibts da sowas wie swap oder muss ich in ner schlaufe drüber und einzeln kopieren?</p>
<p>danke schomaal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120873</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Sun, 20 Aug 2006 13:02:54 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 13:10:29 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Du kannst <em>copy</em> aus <em>algorithm</em> verwenden. Allerdings muss dein Vector dann auch den Typ std::pair&lt; T1, T2 &gt; enthalten.</p>
<p>Also:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;map&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

int main()
{
	std::map&lt; int, int &gt; foo;

	foo[ 0 ] = 0;
	foo[ 1 ] = 1;
	foo[ 2 ] = 2;

	std::vector&lt; std::pair&lt; int, int &gt; &gt; bar( foo.size() );
	std::copy( foo.begin(), foo.end(), bar.begin() );

	for ( std::vector&lt; std::pair&lt; int, int &gt; &gt;::iterator it = bar.begin(); it != bar.end(); ++it )
	{
		std::cout &lt;&lt; ( *it ).second &lt;&lt; std::endl;
	}

	std::cin.get();

	return 0;
}
</code></pre>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120882</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sun, 20 Aug 2006 13:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 13:12:16 GMT]]></title><description><![CDATA[<p>Danke, aber ne sorry.<br />
Ich will nur den Wert kopieren.</p>
<pre><code class="language-cpp">map&lt;int, string&gt; namemap;
vector&lt;string&gt; names;
</code></pre>
<p>Geht das ned? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120883</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Sun, 20 Aug 2006 13:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 13:13:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">names.push_back( namemap[i] );
</code></pre>
<p>Ist leider alles was mir einfällt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120885</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Sun, 20 Aug 2006 13:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 13:14:07 GMT]]></title><description><![CDATA[<p>Dann machs per iterator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120886</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sun, 20 Aug 2006 13:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 14:37:31 GMT]]></title><description><![CDATA[<p>STL Noob schrieb:</p>
<blockquote>
<p>Danke, aber ne sorry.<br />
Ich will nur den Wert kopieren.</p>
<pre><code class="language-cpp">map&lt;int, string&gt; namemap;
vector&lt;string&gt; names;
</code></pre>
<p>Geht das ned? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Meinerseits <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
WAS möchtest Du ? Welchen &quot;Wert&quot; ?<br />
Dein Sourcebeispiel funktioniert natürlich problemlos, &quot;kopiert&quot; aber nichts, sondern legt einfach nur eine Map (namens &quot;namemap&quot;) und einen vector (namens &quot;names&quot;) an und deren Inhalte haben nichts gemeinsam....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120948</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 20 Aug 2006 14:37:31 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 15:18:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;

using namespace std;

template&lt;typename Container&gt;
struct MapValueBackInserter{
    MapValueBackInserter(Container &amp; cont):m_cont(cont){}
    template&lt;typename T&gt;
    void operator()(T &amp; pair){
        m_cont.push_back(pair.second);
    }
private:
    Container &amp; m_cont;
};

int main()
{
    map&lt;int,string&gt; mymap;
    vector&lt;string&gt;  myvec;

    for_each(mymap.begin(),mymap.end(),MapValueBackInserter&lt;vector&lt;string&gt; &gt;(myvec));

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1120973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120973</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sun, 20 Aug 2006 15:18:47 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 15:55:39 GMT]]></title><description><![CDATA[<p>Bin jetzt zwar zu spät weil ich zwischendrin was gegessen hab <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> ,gebe aber trotzdem noch meinen Senf dazu.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;list&gt;
#include &lt;iterator&gt;

using namespace std;

template &lt;class T1_,class T2_,class dest_container_type&gt;
class cross_inserter
	:public std::iterator&lt;std::output_iterator_tag,void,void,void,void&gt;
{
public:
	explicit cross_inserter(dest_container_type&amp; s_)
		:value_set(s_){}
	cross_inserter&amp; operator= (std::pair&lt;const T1_,T2_&gt; p_)
	{
		value_set.insert(value_set.end(),p_.second);
		return *this;
	}
	cross_inserter&amp; operator*()		{return *this;}
	cross_inserter&amp; operator++()	{return *this;}
	cross_inserter&amp; operator++(int)	{return *this;}
private:
	dest_container_type&amp; value_set;
};

int main()
{
	map&lt;int,string&gt; foo;
	foo[0] = &quot;eins&quot;;
	foo[1] = &quot;zwei&quot;;
	foo[2] = &quot;drei&quot;;

	list&lt;string&gt; bar;
	cross_inserter&lt;int,string,list&lt;string&gt; &gt; ci(bar);
	copy(foo.begin(),foo.end(),ci);

	list&lt;string&gt;::iterator it = bar.begin();
	while(it!= bar.end())
	{
		cout&lt;&lt;*it&lt;&lt;endl;
		++it;
	}

	return 0;
}
</code></pre>
<p>MfG Spacelord</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1120996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1120996</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Sun, 20 Aug 2006 15:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Sun, 20 Aug 2006 19:07:10 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Spacelord, Genial! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Was geht eingentlich am schnellsten?</p>
<pre><code class="language-cpp">for( iterator it = namemap.begin(); it != namemap.end(); ++it ) // oder for( int i = 0; i &lt; namemap.size(); ++i )?
{
    names.push_back( namemap[i] );
}
</code></pre>
<p>oder<br />
foreach und dem Back Inserter von evillisimo?<br />
Oder mit copy und Spacelords Variante?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121080</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Sun, 20 Aug 2006 19:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 08:45:32 GMT]]></title><description><![CDATA[<p>Ahaaaa !!!</p>
<p>Anhand der Beispiele vom Chefkoch und dem Lord ist mir auch klar, was gesucht ist !<br />
[quote=&quot;Simon2&quot;]</p>
<p>STL Noob schrieb:</p>
<blockquote>
<p>Danke, aber ne sorry.<br />
Ich will nur den Wert kopieren.<br />
...</p>
</blockquote>
<p>&quot;Wert&quot; als Gegensetz zu &quot;Key&quot; .... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Danke für die Erhellung,</p>
<p>Simon2.</p>
<p>P.S.: Nur der Vollständigkeit halber: Im Ergebnisvektor sind die Werte natürlich nicht mehr eindeutig. Mag gewollt und bewusst sein - wollte es nur für den Fall der Fälle anmerken....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121299</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 21 Aug 2006 08:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 09:36:47 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>...<br />
P.S.: Nur der Vollständigkeit halber: Im Ergebnisvektor sind die Werte natürlich nicht mehr eindeutig. Mag gewollt und bewusst sein - wollte es nur für den Fall der Fälle anmerken....</p>
</blockquote>
<p>Die Werte sind doch in der Map schon nicht eindeutig, ein Wert kann unter mehreren Keys vorkommen, ist mir durchaus bewusst, aber das wird nicht der Fall sein.</p>
<p>Was ist denn eurer Meinung nach am günstigsten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121332</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Mon, 21 Aug 2006 09:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 14:24:02 GMT]]></title><description><![CDATA[<p>STL Noob schrieb:</p>
<blockquote>
<p>...Die Werte sind doch in der Map schon nicht eindeutig, ein Wert kann unter mehreren Keys vorkommen, ist mir durchaus bewusst, aber das wird nicht der Fall sein....</p>
</blockquote>
<p>Dann ist ja alles klar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich hatte halt vermutet (und Du hast es bestätigt: &quot;... wird nicht der Fall sein...&quot;), dass Du implizit davon ausgehst, dass ein find() auf den Ergebnisvector auch ein eindeutiges Ergebnis liefert. (z.B. sehr schön versteckt, wenn Du implizit davon ausgehst, dass sich in Deinem vector &quot;size()-viele IDs&quot; befinden....)</p>
<p>Aber wenn Dir das klar ist und Du überall damit umgehst, ist ja alles OK - wollte es nur in Erinnerung bringen.</p>
<p>STL Noob schrieb:</p>
<blockquote>
<p>...<br />
...Was ist denn eurer Meinung nach am günstigsten?</p>
</blockquote>
<p>Ich würde schätzen, dass sich die Dinger alle nicht viel tun. Sie werden im Wesentlichen zu demselbe Code compiliert, der eben die Map Element für Element durchgeht und ein vector&lt;&gt;::push_back() durchführt (ebenso wie Deine selbstgeschriebene &quot;Schlaufe&quot; <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="😉"
    /> ).<br />
Ist eher eine Geschmacksfrage.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121477</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 21 Aug 2006 14:24:02 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 12:46:04 GMT]]></title><description><![CDATA[<p>ok <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Dann mach ichs simpel mit der selbstgeschriebenen &quot;Schlaufe&quot; (Was ist an dem Wort so witzig? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> ) Da finde ich ersichtlicher was geht, wenn ich den Code anschau.<br />
Eventuell ein Reserve mit der Grösse der Mappe davor dürfte noch was bringen, denk ich..</p>
<pre><code class="language-cpp">map&lt;int, string&gt; namemap;
vector&lt;string&gt; names; 
int names_cnt = namemap.size();
names.reserve( names_cnt );
for( int i = 0; i &lt; names_cnt; ++i )
{
    names.push_back( namemap[i] );
}
</code></pre>
<p>Danke allen für die tollen Lösungen und Tipps <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121507</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Mon, 21 Aug 2006 12:46:04 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 13:57:16 GMT]]></title><description><![CDATA[<p>War da nicht grad noch ein Beitrag von loooolllll?<br />
Was stand da? Als ich ihn angucken wollte, war er weg..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121575</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Mon, 21 Aug 2006 13:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 14:14:39 GMT]]></title><description><![CDATA[<p>Schlaufe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Schleife<br />
Map != Mappe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121589</guid><dc:creator><![CDATA[Korrektur]]></dc:creator><pubDate>Mon, 21 Aug 2006 14:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 14:18:40 GMT]]></title><description><![CDATA[<p>Und warum wurde das gelöscht?<br />
Ist doch nett mich darauf hin zu weisen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121592</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Mon, 21 Aug 2006 14:18:40 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 14:37:24 GMT]]></title><description><![CDATA[<p>hier noch eine variante mit adaptern:</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct mem_ref_t : public std::unary_function&lt; T, U&amp; &gt;
{
    explicit mem_ref_t(U T::* p) : p_( p ) {}
    U&amp; operator()(T&amp; ref) const { return ref.*p_; }
    const U&amp; operator()(const T&amp; ref) const { return ref.*p_; }
    U T::* p_;
};
template&lt;typename T, typename U&gt;
mem_ref_t&lt; T, U &gt; mem_ref(U T::* p) { return mem_ref_t&lt; T, U &gt;( p ); }
int main()
{
    using namespace std;
    map&lt;int, string&gt; namemap;
    vector&lt;string&gt; names;
    int names_cnt = namemap.size();
    names.reserve( names_cnt );
    transform( namemap.begin(), namemap.end(), back_inserter( names ), mem_ref( &amp;map&lt;int, string&gt;::value_type::second ) );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1121608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121608</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 21 Aug 2006 14:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 15:03:22 GMT]]></title><description><![CDATA[<p>STL Noob schrieb:</p>
<blockquote>
<p>Und warum wurde das gelöscht?<br />
Ist doch nett mich darauf hin zu weisen..</p>
</blockquote>
<p>Das wurde gelöscht weil der sich in dem Post nur lustig darüber gemacht hat. Und nicht verbessert hat.</p>
<p>BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121628</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Mon, 21 Aug 2006 15:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 15:13:28 GMT]]></title><description><![CDATA[<p>Ok. Lustig machen kann ich mich selbst. Für mich sind Schlaufe und Schleife das selbe, halt ein nett gefaltetes Stoffband zB..</p>
<p>camper schrieb:</p>
<blockquote>
<p>hier noch eine variante mit adaptern:</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct mem_ref_t : public std::unary_function&lt; T, U&amp; &gt;
{
    explicit mem_ref_t(U T::* p) : p_( p ) {}
    U&amp; operator()(T&amp; ref) const { return ref.*p_; }
    const U&amp; operator()(const T&amp; ref) const { return ref.*p_; }
    U T::* p_;
};
template&lt;typename T, typename U&gt;
mem_ref_t&lt; T, U &gt; mem_ref(U T::* p) { return mem_ref_t&lt; T, U &gt;( p ); }
int main()
{
    using namespace std;
    map&lt;int, string&gt; namemap;
    vector&lt;string&gt; names;
    int names_cnt = namemap.size();
    names.reserve( names_cnt );
    transform( namemap.begin(), namemap.end(), back_inserter( names ), mem_ref( &amp;map&lt;int, string&gt;::value_type::second ) );
}
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Versteh ich nicht.<br />
Was bedeuten denn T:: im Konstruktor?</p>
<p>Bei all den vielen Varianten weis ich gar nicht mehr, warum ich das machen wollte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> nein quatsch, ich weis nicht mehr welche ich nehmen soll. Die sind alle schön, aber was ist schnell?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121637</guid><dc:creator><![CDATA[STL Noob]]></dc:creator><pubDate>Mon, 21 Aug 2006 15:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Mon, 21 Aug 2006 19:00:23 GMT]]></title><description><![CDATA[<p>die idee ist, ein funktionsobjekt zu bauen, dass für ein gegebenes (pair-)objekt den zweiten member extrahiert:</p>
<pre><code class="language-cpp">template&lt;typename T, typename U&gt;
struct ExtractSecond
{
    string&amp; operator()(std::pair&lt;int,string&gt;&amp; p) const { return p.second; }
    const string&amp; operator()(const std::pair&lt;int,string&gt;&amp; p) const { return p.second; }
};
</code></pre>
<p>damit können wir ein einfach transform benutzen:</p>
<pre><code class="language-cpp">transform( namemap.begin(), namemap.end(), back_inserter( names ), ExtractSecond() );
</code></pre>
<p>der rest ist nichts weiter als eine generalisierung im stile der standard adapter mem_fun_ref &amp; co.</p>
<pre><code class="language-cpp">U T::* p;
</code></pre>
<p>deklariert einen pointer auf ein member der klasse T vom typ U</p>
<p>die notwendigkeit, einen eigenen adapter zu benötigen, ist auch einem designfehler der standardbibliothek geschuldet - wäre der zugriff auf die einzelelemente von vornherein durch memberfunktionen geregelt, könnte man standardadapter benutzen (vgl. boost::compressed_pair)</p>
<p>prinzipiell sind alle vorgestellten lösungen potenmtiell gleich schnell, es kommt letzlich auf die qualität deines compilers an. eine forschleife bzw. for_each sind dabei für den optimierer wahrscheinlich noch am leichtesten zu verarbeiten, aber prinzipiell müsstest du schon messen, um eine definitive antwort zu erhalten.</p>
<p>P.S. kleiner spaß: auch in vc++8.0 gibt es noch jede menge ICEs</p>
<pre><code class="language-cpp">struct X
{
    int&amp; x;
};
void foo() { mem_ref( &amp;X::x ); }
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121792</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 21 Aug 2006 19:00:23 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Tue, 22 Aug 2006 05:09:42 GMT]]></title><description><![CDATA[<p>STL Noob schrieb:</p>
<blockquote>
<p>Die sind alle schön, aber was ist schnell?</p>
</blockquote>
<p>Wie bereits mehrfach erwähnt werden die sich wohl alle nicht viel tun aber wenn es denn wirklich auf jede Nanosekunde ankommt, wären speziell für die Lösungen vom Chefkoch und mir noch Spezialisierungen für einzelne Containertypen angemessen.<br />
Die Art wie der Zielcontainer &quot;arbeitet&quot; ist sicherlich mitentscheidend für die Performance der Lösungen.</p>
<p>MfG Spacelord</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121912</guid><dc:creator><![CDATA[Spacelord]]></dc:creator><pubDate>Tue, 22 Aug 2006 05:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to [STL] Map in Vector &amp;quot;swappen&amp;quot; ?? on Tue, 22 Aug 2006 07:30:53 GMT]]></title><description><![CDATA[<p>STL Noob schrieb:</p>
<blockquote>
<p>...ich weis nicht mehr welche ich nehmen soll. Die sind alle schön, aber was ist schnell?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich persönlich finde es sehr schön, dass es so viele Stile und Möglichkeiten in C++ gibt, etwas umzusetzen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Mein Tipp:<br />
- Nimm die Variante, die Du am besten verstehst, bzw. die Dir am übersichtlichsten erscheint (nicht vergessen, dass man ca. 60% der Entwicklungszeit damit verbringt, Sourcecode zu &quot;verändern&quot; (anpassen, korrigieren, erweitern, ...)).<br />
- Mach Dir um Performance Gedanken, wenn es soweit ist (sprich: Du festgetellt hast, dass es zu langsam ist).<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wenn es Dich wirklich interessiert, kannst Du ja alle Varianten implementieren und Performancemessungen durchführen (wobei ich - wie gesagt - immer noch davon überzeugt bin, dass ein (guter) Compiler aus allen Varianten mehr oder minder denselben Code macht =&gt; alle gleich schnell sind; zumindestens bei einfachen Datentypen).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1121959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1121959</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 22 Aug 2006 07:30:53 GMT</pubDate></item></channel></rss>