<?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 maps mit eigenem constructor in einer Klasse verwenden - wie?]]></title><description><![CDATA[<p>Hi alle,</p>
<p>ich möchte in einer Klasse eine map&lt;&gt; als der STL verwenden. Bei den maps kann man als 3. Parameter ja einen Vergleichsoperator angeben. Das Problem ist, dass ich beim Vergleichen einen Parameter benötige, der dem Vergleichsoperator beim &quot;Konstruieren&quot; übergeben werden muss, die map ruft aber immer den Standardkonstruktor auf.</p>
<p>Vielleicht ein Beispiel, damit's klarer wird:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;map&gt;

class Test {
	private:
		class cmp {
			private:
			public:
				long Ncomp;
				cmp()       {Ncomp = 0;};
				cmp(long n) {Ncomp = n;};
				bool operator() (const char* s1, const char* s2) {
					return memcmp( s1, s2, Ncomp ) &lt; 0;
				};
		};
		std::map&lt;char*,int,cmp&gt; sols; // sols verwendet jetzt den Standardkonstruktor cmp().
Wie sagt how to make it use e.g. cmp(5) instead?
	public:
		void AddString(char*);
		void ListStrings(void);
};

void Test::AddString(char*s) {
	char*c;
	c = new char[10]; // don't be bothered by the fixed length, it's just an example :)
	memcpy(c,s,10);
	sols[c]++;
}

void Test::ListStrings(void) {
	std::map&lt;char*,int,cmp&gt;::iterator it;
	for (it = sols.begin(); it != sols.end(); it++) {
		printf(&quot;%s %d\n&quot;,it-&gt;first,it-&gt;second);
	}
}

int main() {
    Test t;
    t.AddString(&quot;123&quot;);
    t.AddString(&quot;123&quot;);
    t.AddString(&quot;234&quot;);
    t.ListStrings();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/180567/stl-maps-mit-eigenem-constructor-in-einer-klasse-verwenden-wie</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:33:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180567.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 May 2007 08:11:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL maps mit eigenem constructor in einer Klasse verwenden - wie? on Fri, 04 May 2007 08:11:52 GMT]]></title><description><![CDATA[<p>Hi alle,</p>
<p>ich möchte in einer Klasse eine map&lt;&gt; als der STL verwenden. Bei den maps kann man als 3. Parameter ja einen Vergleichsoperator angeben. Das Problem ist, dass ich beim Vergleichen einen Parameter benötige, der dem Vergleichsoperator beim &quot;Konstruieren&quot; übergeben werden muss, die map ruft aber immer den Standardkonstruktor auf.</p>
<p>Vielleicht ein Beispiel, damit's klarer wird:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;map&gt;

class Test {
	private:
		class cmp {
			private:
			public:
				long Ncomp;
				cmp()       {Ncomp = 0;};
				cmp(long n) {Ncomp = n;};
				bool operator() (const char* s1, const char* s2) {
					return memcmp( s1, s2, Ncomp ) &lt; 0;
				};
		};
		std::map&lt;char*,int,cmp&gt; sols; // sols verwendet jetzt den Standardkonstruktor cmp().
Wie sagt how to make it use e.g. cmp(5) instead?
	public:
		void AddString(char*);
		void ListStrings(void);
};

void Test::AddString(char*s) {
	char*c;
	c = new char[10]; // don't be bothered by the fixed length, it's just an example :)
	memcpy(c,s,10);
	sols[c]++;
}

void Test::ListStrings(void) {
	std::map&lt;char*,int,cmp&gt;::iterator it;
	for (it = sols.begin(); it != sols.end(); it++) {
		printf(&quot;%s %d\n&quot;,it-&gt;first,it-&gt;second);
	}
}

int main() {
    Test t;
    t.AddString(&quot;123&quot;);
    t.AddString(&quot;123&quot;);
    t.AddString(&quot;234&quot;);
    t.ListStrings();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278564</guid><dc:creator><![CDATA[Alexander1234]]></dc:creator><pubDate>Fri, 04 May 2007 08:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to STL maps mit eigenem constructor in einer Klasse verwenden - wie? on Fri, 04 May 2007 08:17:15 GMT]]></title><description><![CDATA[<p>Nachtrag: Wenn ich nach der Deklaration in einer Funktion ein Objekt instanziiere, wie z.B.</p>
<pre><code>std::map&lt;char*,int,cmp&gt; sols2(5);
</code></pre>
<p>dann kann ich da einen eigenen Konstruktor verwenden, aber das funktioniert natürlich (so) nicht in der Klassendeklaration.</p>
<p>Vielleicht gibt es ja eine ganz einfache Lösung?? <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="😕"
    /> Hab leider in keinem Forum und keiner Gruppe einen Eintrag gefunden, der genau auf das Problem passt.</p>
<p>Hoffe, ihr könnt mir helfen,<br />
mfg,<br />
Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278568</guid><dc:creator><![CDATA[Alexander1234]]></dc:creator><pubDate>Fri, 04 May 2007 08:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to STL maps mit eigenem constructor in einer Klasse verwenden - wie? on Fri, 04 May 2007 08:19:40 GMT]]></title><description><![CDATA[<p>Du kannst dem map-Ctor auch ein bestimmtes Exemplar deines Vergleichsfunktors mitgeben:</p>
<pre><code class="language-cpp">Test::Test() : sols(cmp(5)) {};
</code></pre>
<p>(nutzt cmp(5) als Vergleichsfunktion)</p>
<p>Edit: Randfrage: Warum verwendest du kein std::string?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278569</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 May 2007 08:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to STL maps mit eigenem constructor in einer Klasse verwenden - wie? on Fri, 04 May 2007 08:44:29 GMT]]></title><description><![CDATA[<p>*freu* Es geht!</p>
<p>Ja, ich weiß, ich hätte Strings verwenden dürfen / können / sollen <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>Letztendlich wär das aber unbefriedigend, weil es ja nicht mein eigentliches Problem löst (nämlich die Parameterübergabe).</p>
<p>Aber so</p>
<pre><code>Test::Test(long n) : sols(cmp(n)) {};
</code></pre>
<p>ist's toll. Vielen Dank für die schnelle Hilfe!!! Ich glaub, ich meld mich hier mal an <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1278592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278592</guid><dc:creator><![CDATA[Alexander1234]]></dc:creator><pubDate>Fri, 04 May 2007 08:44:29 GMT</pubDate></item></channel></rss>