<?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[Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :)]]></title><description><![CDATA[<p>ich hab ein Vokabeltrainer geschrieben und hab das mit stl::map gemacht- weils schön iss <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="😉"
    /> . allerdings hab ich da nee merkwürdigkeit<br />
hab zwei maps erstellt und wenn ich erst englische listing ausführe also &quot;1&quot; (zeigt er englische listing an) aber wenn ich dann &quot;2&quot; ausführe zeigt er mir das deutsche listing nicht mehr an. warum <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 />
komisch oder??</p>
<pre><code>[b]coding wegen Übersichtlichkeit nach unten verschoben..wurde editiert[/b]
</code></pre>
<p>siehe auch kommentare ... hilfe erbeten und wäre dankbar mit einen mentalen dankeschön <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="😃"
    /><br />
gruss sten</p>
<p>ps. wenn ich grad dabei bin ... gibt es auch nee möglichkeit lexikographisch zu sortieren, dh. nicht nur rein nach ASCII weil bei der map-sortierung geht es nur ASCII- mässig ..</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183664/merkwürdigkeiten-bei-stl-map-erklärung-und-hilfe-benötigt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 14:27:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183664.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Jun 2007 10:17:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Fri, 08 Jun 2007 21:17:21 GMT]]></title><description><![CDATA[<p>ich hab ein Vokabeltrainer geschrieben und hab das mit stl::map gemacht- weils schön iss <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="😉"
    /> . allerdings hab ich da nee merkwürdigkeit<br />
hab zwei maps erstellt und wenn ich erst englische listing ausführe also &quot;1&quot; (zeigt er englische listing an) aber wenn ich dann &quot;2&quot; ausführe zeigt er mir das deutsche listing nicht mehr an. warum <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 />
komisch oder??</p>
<pre><code>[b]coding wegen Übersichtlichkeit nach unten verschoben..wurde editiert[/b]
</code></pre>
<p>siehe auch kommentare ... hilfe erbeten und wäre dankbar mit einen mentalen dankeschön <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="😃"
    /><br />
gruss sten</p>
<p>ps. wenn ich grad dabei bin ... gibt es auch nee möglichkeit lexikographisch zu sortieren, dh. nicht nur rein nach ASCII weil bei der map-sortierung geht es nur ASCII- mässig ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300597</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Fri, 08 Jun 2007 21:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Thu, 07 Jun 2007 12:45:05 GMT]]></title><description><![CDATA[<p>Erstmal solltest du die map(s) nur einmal einlesen und dann im Hauptprogramm lagern - an die statischen Variablen kommt nämlich niemand als die jeweiligen Funktionen heran.</p>
<p>Zweitens steht der Lesezeiger deiner Wörterbuch-Datei am Ende der Print_Eng() auf deren Dateiende. Das heißt, bevor du irgendwas sinnvolles mit der Datei machen kannst, mußt du deren Fehlerflag aufräumen (clear()) und sie wieder zurückdrehen auf Anfang (seekg(0) oder rewind()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300713</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 07 Jun 2007 12:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Fri, 08 Jun 2007 20:59:05 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Erstmal solltest du die map(s) nur einmal einlesen und dann im Hauptprogramm lagern - an die statischen Variablen kommt nämlich niemand als die jeweiligen Funktionen heran.</p>
</blockquote>
<p>okdoki da haste recht.. hab ich gemacht</p>
<pre><code class="language-cpp">#pragma warning( disable : 4244 )

#include &quot;stdafx.h&quot;

#include &lt;cstdlib&gt; // contains prototypes for functions srand and rand
using std::rand;
using std::srand;
#include &lt;ctime&gt; // contains prototype for function time
using std::time;

#include &lt;string&gt;
using std::string;
#include &lt;iostream&gt;
using std::cout;
using std::cin;
using std::endl;
using std::ios;
using std::cerr;

#include &lt;iomanip&gt;
using std::setw;
using std::left;
using std::right;

#include &lt;map&gt;
typedef std::map&lt;string, string, std::less&lt;string&gt;&gt; StringMap;

#include &lt;algorithm&gt;
#include &lt;iterator&gt;

#include &lt;fstream&gt;
using std::ifstream;
using std::ostream;

enum Choices{PRINT_ENG='1', PRINT_GER='2', ENG_WORD='3', GER_WORD='4', END='5'};

char menu();
void Print_Eng(StringMap&amp;);
void Print_Ger(StringMap&amp;);
void Eng_Word(StringMap&amp;,int);
void Ger_Word(StringMap&amp;,int);
int random(int count);

int _tmain(int argc, _TCHAR* argv[])
{	

	ifstream infile(&quot;data.txt&quot;, ios::in);
	 if(!infile)
		{
			cerr&lt;&lt;&quot;File could not be opened&quot;&lt;&lt;endl;
			exit(1);
		}
	 StringMap Eng_wordPairs;
	 StringMap Ger_wordPairs;
	 string english, german;
    static int counter=-1; //zählt eins zuviel ?
	while(infile)
	 {
		 getline(infile, english, ',');
		 getline(infile, german, '\n');
		 Eng_wordPairs.insert(StringMap::value_type(english,german)); 
		 Ger_wordPairs.insert(StringMap::value_type(german,english));
		 ++counter;	
	}
	int whichword=random(counter);

	char choice;
	while((choice=menu())!=END)
	{
		switch(choice)
		{
		case PRINT_ENG:
			Print_Eng(Eng_wordPairs);
			break;

		case PRINT_GER:
			Print_Ger(Ger_wordPairs);
			break;

		case ENG_WORD:
			Eng_Word(Eng_wordPairs, whichword);
			break;

		case  GER_WORD:
			Ger_Word(Ger_wordPairs, whichword);
			break;

		default:
			cerr&lt;&lt;&quot;Incorrect choice, try again!&quot;&lt;&lt;endl;
			menu();
		}//end switch
	}//endwhile

	infile.close();
	return 0;
}
int random(int count)
{
	srand( time( 0 ) );
	int r = 1 + rand() % count;
	return r;
}

char menu()
{
	cout&lt;&lt;&quot;****Vocable-Trainee(GER&lt;-&gt;ENG)****&quot;&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;**************Menu****************&quot;&lt;&lt;endl;
	cout&lt;&lt;&quot;1 english listing&quot;&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;2 german listing&quot;&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;3 random english vocable&quot;&lt;&lt;&quot;\n&quot;;
	cout&lt;&lt;&quot;4 random german vocable&quot;&lt;&lt;&quot;\n&quot;;
    cout&lt;&lt;&quot;5 End Programm&quot;&lt;&lt;&quot;\n&quot;;
	char menuChoice;
	cout&lt;&lt;&quot;your choice: &quot;;
	cin&gt;&gt;menuChoice;
	return menuChoice;
}

void Print_Eng(StringMap&amp; Eng_wordPairs)
{
  cout&lt;&lt;&quot;\nEnglish:&quot;&lt;&lt;endl; 
	for(StringMap::const_iterator iter=Eng_wordPairs.begin();
		 iter!=Eng_wordPairs.end(); ++iter)
		 cout&lt;&lt;left&lt;&lt;setw(25)&lt;&lt;iter-&gt;first&lt;&lt;&quot;:&quot;&lt;&lt;setw(25)&lt;&lt;left&lt;&lt;iter-&gt;second&lt;&lt;&quot;\n&quot;;
}

void Print_Ger(StringMap&amp; Ger_wordPairs)
{
   cout&lt;&lt;&quot;\nDeutsch:&quot;&lt;&lt;endl;
	 for(StringMap::const_iterator iter=Ger_wordPairs.begin();
		 iter!=Ger_wordPairs.end(); ++iter)
		 cout&lt;&lt;left&lt;&lt;setw(25)&lt;&lt;iter-&gt;first&lt;&lt;&quot;:&quot;&lt;&lt;setw(25)&lt;&lt;left&lt;&lt;iter-&gt;second&lt;&lt;&quot;\n&quot;;	
}

void Eng_Word(StringMap&amp; Eng_wordPairs,int count)
{}

void Ger_Word(StringMap&amp; Ger_wordPairs,int)
{}
</code></pre>
<p>jetzt bleibt noch das problem mit dem lexikalischen ordnen hmmm ? hab da bisher in meiner literatur nichts besseres gefunden (zur zeit sortiert es nur nach ASCII zeichen, d.h. erst werden kleinbuchstaben sortiert dann grossbuchstaben)<br />
achja gibt es nee möglichkeit wie ich zugriff auf ein beliebiges element bekomme? (möchte nämlich ein zufallswort generieren)<br />
oder muss ich tatsächlich vorwärts iterieren :(.. wollte mit ner zufallsfunktion<br />
ein index generieren und zugreifen aber leider gibt es bei map anscheinend keine indizierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> (naja hätte auch vector nehmen können aber will das mit map machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> )</p>
<p>gruss sten<br />
ps. danke schonmal für eure hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1301683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301683</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Fri, 08 Jun 2007 20:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sat, 09 Jun 2007 05:48:42 GMT]]></title><description><![CDATA[<blockquote>
<p>jetzt bleibt noch das problem mit dem lexikalischen ordnen hmmm ?</p>
</blockquote>
<p>das ist net ganz so einfach, dafür musst du die vergleichsfunktion separat angeben</p>
<p>das geht in etwa so:</p>
<pre><code class="language-cpp">#include &lt;locale&gt;//das muss zusätzlich rein

struct lexicalCompare
{
  bool operator()(const string&amp; s1, const string&amp; s2) const
  {
    //jetzt wirds ätzend
    const std::collate&lt;char&gt;&amp; cmp=std::use_facet&lt;std::collate&lt;char&gt; &gt;(std::locale());
    return cmp.compare(&amp;*s1.begin(),&amp;*s1.end(),&amp;*s2.begin(),&amp;*s2.end())&lt;0;
  }
};
//die map
typedef std::map&lt;string, string, lexicalCompare&gt; StringMap;
</code></pre>
<blockquote>
<p>achja gibt es nee möglichkeit wie ich zugriff auf ein beliebiges element bekomme? (möchte nämlich ein zufallswort generieren)<br />
oder muss ich tatsächlich vorwärts iterieren</p>
</blockquote>
<p>jep, musst du. in einer map ist sowas was du willst nicht schnell zu implementieren, und bei der stl geht es um geschwindigkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1301763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301763</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 09 Jun 2007 05:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sat, 09 Jun 2007 11:36:24 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a>: leider funzt das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> , gibt ein runtimefehler aus:<br />
zitat:</p>
<blockquote>
<p>Debug Assertion Failed!</p>
<p>Progamm: blala pfadangabe...</p>
<p>Expression:string iterator not deferencable</p>
<p>For information on how your programm can cause assertion<br />
falure, see... docublabla</p>
</blockquote>
<pre><code class="language-cpp">void Eng_Word(StringMap&amp; Eng_wordPairs, int&amp; counter)
{
	int whichword=random(counter);
	cout&lt;&lt;&quot;\nwhichword:&quot;&lt;&lt;whichword&lt;&lt;endl;

	StringMap::const_iterator iter=Eng_wordPairs.begin();
	for(int randomcounter=0; randomcounter&lt;whichword; randomcounter++)
	{
		++iter;		
	}cout&lt;&lt;&quot;\nZufallswort:&quot;&lt;&lt;iter-&gt;first;

}
</code></pre>
<p>so ich hab die zufallsfunktion implementiert , was meint ihr iss das ok oder is das spagetticode <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="😕"
    /> falls ja ich bin für nee performantere lösung dankbar...<br />
das mit dem Lexikalisch ordnen iss kompliziert ich hab die vermutung das otze da ein funktionsobjekt programmiert hat , allerdings sind mir die stl-funktionen unbekannt bzw ich steig da net durch was die macht naja iss auch wurst wenn der fehler noch bereinigt werden könnte oder wenn jemand nee andere lösung hat, nicht zögern hier rein zu schreiben. ein mentaler dank ist demjenigen gewiss <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/1301798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1301798</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 09 Jun 2007 11:36:24 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sat, 09 Jun 2007 22:19:14 GMT]]></title><description><![CDATA[<p>ohne zu wissen, welche stl implementation du nutzt, kann ich nur raten.</p>
<p>ich vermute, dass das dereferenzieren von end() nicht erlaubt ist.</p>
<p>dann halt bissl anders:</p>
<pre><code class="language-cpp">struct lexicalCompare
{
  bool operator()(const string&amp; s1, const string&amp; s2) const
  {
    //jetzt wirds ätzend
    const std::collate&lt;char&gt;&amp; cmp=std::use_facet&lt;std::collate&lt;char&gt; &gt;(std::locale());
    return cmp.compare(s1.data(),s1.data()+s1.size(),s2.data(),s2.data()+s2.size())&lt;0;
  }
};
</code></pre>
<p>was genau passiert:</p>
<p>ich bastel hier nen funktor der folgendes macht:<br />
zuerst hol ich mir das collate objekt aus dem globalen locale. in diesem locale sind die informationen darüber gespeichert, wie in der eingestellten umgebung strings sortiert werden(neben noch vielem mehr). Collate ist dabei das Objekt,d ass sich nur ums sortieren kümmert.<br />
von diesem objekt ruf ich dann compare auf, die eigentliche vergleichsfunktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302244</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 09 Jun 2007 22:19:14 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sun, 10 Jun 2007 03:41:06 GMT]]></title><description><![CDATA[<p>Nur so nebenbei: wenn du &quot;std::locale&quot; und &quot;std::collate&lt;char&gt;&amp;&quot; zu Membern machst sollte das einiges an Geschwindigkeit bringen <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302284</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 10 Jun 2007 03:41:06 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sun, 10 Jun 2007 10:26:36 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<pre><code class="language-cpp">struct lexicalCompare
{
  bool operator()(const string&amp; s1, const string&amp; s2) const
  {
    //jetzt wirds ätzend
    const std::collate&lt;char&gt;&amp; cmp=std::use_facet&lt;std::collate&lt;char&gt; &gt;(std::locale());
    return cmp.compare(s1.data(),s1.data()+s1.size(),s2.data(),s2.data()+s2.size())&lt;0;
  }
};
</code></pre>
</blockquote>
<p>danke aber deine funktionsobjekt macht das gleiche wie mein</p>
<pre><code class="language-cpp">typedef std::map&lt;string, string, std::less&lt;string&gt;&gt; StringMap;
</code></pre>
<p>von der stl.<br />
ich möchte das das grosse A und das kleine a genauso behandelt werden.<br />
als beispiel:<br />
ich habe diese wörter in der txt-datei:</p>
<p>Arbeit<br />
Besen<br />
Leben<br />
argwöhnisch<br />
bösartig<br />
Leben</p>
<p>nach Ascii wird es so sortiert, also nach meiner genauso wie nach deiner variante:</p>
<pre><code>Arbeit
Besen
Leben
argwöhnisch
bösartig
lieblich
</code></pre>
<p>d.h. erst die grossen buchstaben dann die kleinen buchstaben:<br />
ich möchte aber:<br />
<strong>Arbeit<br />
argwöhnisch<br />
Besen<br />
bösartig<br />
Leben<br />
lieblich</strong><br />
garnet so einfach <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="😕"
    /> hmmm irgendwie muss man wohl, eventuell die operatoren &gt; &lt; überladen . vielleicht gehts dann frag mich nur wie? hmmm.</p>
<p>ps. und das problem geht weiter ! &quot;umlaute äöü...!&quot; die muüssen auch richtig sortiert werden (meine umschalttaste klemmt (bin nur zu faul *gg)also nicht wundern warum alles klein geschrieben ist )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302341</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sun, 10 Jun 2007 10:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sun, 10 Jun 2007 11:02:03 GMT]]></title><description><![CDATA[<p>hmm ... std::transform(string.begin(), string.end(), string.begin(), std::tolower); ... dann sortieren ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302362</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 10 Jun 2007 11:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sun, 10 Jun 2007 12:28:17 GMT]]></title><description><![CDATA[<p>Sortieren von &quot;transformierten&quot; Strings mit std::less sollte dasselbe Ergebnis liefern wie Sortieren der &quot;nicht transformierten&quot; Strings mit std::collate::compare.<br />
Zumindest wenn ich das richtig verstanden habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302407</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 10 Jun 2007 12:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sun, 10 Jun 2007 13:20:05 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>hmm ... std::transform(string.begin(), string.end(), string.begin(), std::tolower); ... dann sortieren ...</p>
</blockquote>
<p>ich glaube std::transform kann man nicht anwenden bei maps <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
ich hab die codezeile zwischen 65 und 66 eingefügt</p>
<pre><code class="language-cpp">std::transform(Ger_wordPairs.begin(), Ger_wordPairs.end(), Ger_wordPairs.begin(), std::tolower);
</code></pre>
<p>gibt 12 fehlermeldungen u.a<br />
fehlermeldung:</p>
<pre><code>error C2780: '`global namespace'::std::_Enable_if&lt;!std::_Is_checked_iterator&lt;_OutIt&gt;::_Result||!std::_Is_checked_iterator&lt;_OutIt&gt;::_Result,_OutIt&gt;::_Result std::transform(_InIt1,_InIt1,_InIt2,_OutIt,_Fn2)': Erwartet 5 Argumente - 4 unterstützt
        c:\programme\microsoft visual studio 8\vc\include\algorithm(867): Siehe Deklaration von 'std::transform'
</code></pre>
<p>ich glaube ausserdem würde dann alles kleingeschrieben sein oder?. is ja auch nicht Sinnvoll... hmmm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302444</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sun, 10 Jun 2007 13:20:05 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Sun, 10 Jun 2007 15:54:55 GMT]]></title><description><![CDATA[<p>okay ich habs gefunden : das grösste problem gelöst hippie , danke ohne euch wär ich wohl net drauf gekommen .. jetzt gibt es nur noch ein problem´chen siehe unten</p>
<pre><code class="language-cpp">struct ignorecase
{
    std::locale loc;
    bool operator()(const string&amp; s1, const string&amp; s2) const
    {
        string::const_iterator iter1 = s1.begin();
        string::const_iterator iter2 = s2.begin();
        while ((iter1!=s1.end()) &amp;&amp; (iter2!=s2.end()))
        {
            // tolower aus locale. Beruecksichtigt die
            // landesspezifischen Umwandlungen
            char cs1 = std::tolower(*iter1,loc);
            char cs2 = std::tolower(*iter2,loc);
            if (cs1&lt;cs2)
                return true;
            if (cs1&gt;cs2)
                return false;
            ++iter1;
            ++iter2;
        }
        return false;
    }
};
</code></pre>
<p>und dann mit</p>
<pre><code class="language-cpp">typedef std::map&lt;string, string, ignorecase&gt; StringMap;
</code></pre>
<p>so jetzt gibt es nur noch das problem mit dem Umlauten die soll er auch locker floggig sortieren nach lexikon. Im moment sortiert er erst die ä und dann erst a<br />
beispiel:</p>
<pre><code>ärgern 
Arbeit
</code></pre>
<p>normalerweise sollte erst Arbeit dann ärgern kommen.<br />
wenn jemand ne idee hat ..</p>
<p>wobei auf console wird das zeichen wg. zeicheninkomp. nicht richtig dargestellt<br />
gibs wohl keine lösung dafür</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302535</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sun, 10 Jun 2007 15:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 06:50:09 GMT]]></title><description><![CDATA[<p>Vermutlich mußt du das tolower() noch mit dem collate&lt;&gt;-Ansatz von oben zusammenfassen, um die Sonderzeichen mit in die Suchfolge einzubinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302877</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 11 Jun 2007 06:50:09 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 07:43:46 GMT]]></title><description><![CDATA[<p>jep, nun brauchst du collate. allerdings musst du beachten, dass collate sich nach der region richtet, in der du lebst, bzw die bei deinem betriebssystem angegeben ist. Es kann sein, dass du je nach pc unterschiedliche Ergebnisse bekommst, aber es ist dann immer für die region richtig(unterschiedliche Länder, unterschiedliche Arten zu sortieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302903</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 11 Jun 2007 07:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 12:06:19 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Vermutlich mußt du das tolower() noch mit dem collate&lt;&gt;-Ansatz von oben zusammenfassen, um die Sonderzeichen mit in die Suchfolge einzubinden.</p>
</blockquote>
<p><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 />
wie das ?<br />
std::collate&lt;char&gt; cs1 = std::tolower(*iter1,loc); oder dergleichen .. ?? geht nicht..kenn die grammatik und wirkung von std::collate nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303070</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Mon, 11 Jun 2007 12:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 12:25:44 GMT]]></title><description><![CDATA[<p>collate() wandelt den String in etwas um, was nach den gängigen Regeln deiner Sprache sortiert werden kann (was insbesondere bedeutet, daß Umlaute ins Alphabet einsortiert werden). tolower() verwandelt alle Buchstaben in Kleinbuchstaben. Also mußt du die Strings erst per tolower() ver&quot;kleiner&quot;n (eventuell brauchst du dafür auch eine locale-spezifische Variante, die die Umlaute mit behandelt und anschließend durch das collate&lt;&gt; jagen, um die Sortierung richtigzustellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303087</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 11 Jun 2007 12:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 15:11:58 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> aber wie sieht der quellcode dann aus ..ich weiss nicht wie ich das implementieren, definieren <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="😕"
    /> soll .. muss ich das kaskadieren oder wie ?</p>
<p>string sten;<br />
sten=&quot;ich bin doch ein BAP..(BAP = Blödster Anzunehmenster Programmierer)&quot;;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303265</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Mon, 11 Jun 2007 15:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 15:16:48 GMT]]></title><description><![CDATA[<p>Achtung - nicht getestet:</p>
<pre><code class="language-cpp">bool lexical_compare::operator()(string s1,string s2)//Übergabe per Wert ist beabsichtigt
{
  //1) Umwandlung in Kleinbuchstaben:
  transform(s1.begin(),s1.end(),s1.begin(),bind2nd(std::tolower,std::locale());
  transform(s2.begin(),s2.end(),s2.begin(),bind2nd(std::tolower,std::locale());
  //Notiz an mich: Ich bin nicht ganz sicher, ob der bind2nd so klappt

  //2) Locale-abhängig vergleichen:
  const std::collate&lt;char&gt;&amp; cmp=std::use_facet&lt;std::collate&lt;char&gt; &gt;(std::locale());
    return cmp.compare(s1.data(),s1.data()+s1.size(),s2.data(),s2.data()+s2.size())&lt;0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1303270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303270</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 11 Jun 2007 15:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 18:40:55 GMT]]></title><description><![CDATA[<p>nur so nebenbei: locale besitzt selbst einen operator(), der genau dafür gedacht ist.</p>
<pre><code class="language-cpp">map&lt;string,string,locale&gt; localized_map(locale(&quot;de_DE.UTF-8&quot;));
</code></pre>
<p>falls das locale de_DE.UTF-8 vorhanden ist, kümmert es sich automatisch um die richtige lexikographische ordnung. (dafür reicht z.b. unter linux im CLI localedef -f UTF-8 -i de_DE de_DE.UTF-8)</p>
<p>alternativ kannst du dir dein eigenes facet ableiten:</p>
<pre><code class="language-cpp">class CollateIgnoreCase : public collate&lt;char&gt;
{
   int do_compare (const char *A, const char* B, const char* X, const char* Y) const
   {
      /* leave it to you */
   }

   std::string do_transform (const char* A, const char* B) { /* ... */ }

   ~CollateIgnoreCase () {} //dtor privat machen. s.u.
};

void foo();

int main ()
{
   locale(locale(&quot;&quot;), new CollateIgnoreCase); //locale kümmert sich um das delete
   //edit: das speichermanagement von locales und facets ist sowieso ein eigenes kapitel und imo nicht sehr intuitiv geregelt. wenn du das facet stand-alone verwenden willst, musst du dem basisklassenkonstruktor z.b. eine &quot;1&quot; übergeben. andernfalls schadet es sicherlich auch nicht, den destruktor privat (oder protected zu halten)
   foo();
}

void foo ()
{
 map&lt;string,string,locale&gt; localized_map (locale(&quot;&quot;));
 //hier musst du die &quot;&quot; angeben, weil locale keine funktion, sondern ein konstruktor ist und der ausdruck sonst eine funktionsdeklaration wäre.
 //...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1303333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303333</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 11 Jun 2007 18:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Mon, 11 Jun 2007 18:35:19 GMT]]></title><description><![CDATA[<p>ein problem, dass bis jetzt übrigens mit jeder vorgeschlagenen lösung beachtenswert ist, die auf strings zuerst tolower anwedet, ist außerdem folgendes:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Achtung - nicht getestet:</p>
<pre><code class="language-cpp">bool lexical_compare::operator()(string s1,string s2)//Übergabe per Wert ist beabsichtigt
{
  //1) Umwandlung in Kleinbuchstaben:
  transform(s1.begin(),s1.end(),s1.begin(),bind2nd(std::tolower,std::locale());
  transform(s2.begin(),s2.end(),s2.begin(),bind2nd(std::tolower,std::locale());
  //Notiz an mich: Ich bin nicht ganz sicher, ob der bind2nd so klappt

  //2) Locale-abhängig vergleichen:
  const std::collate&lt;char&gt;&amp; cmp=std::use_facet&lt;std::collate&lt;char&gt; &gt;(std::locale());
    return cmp.compare(s1.data(),s1.data()+s1.size(),s2.data(),s2.data()+s2.size())&lt;0;
}
</code></pre>
</blockquote>
<p>selbst, wenn das funktionieren würde, wäre es eine schlechte idee.<br />
gegeben seien zwei strings, a und b, die sich jeweils nur in der groß/kleinschreibung unterscheiden. mit dieser implementation passiert es, dass lexical_compare::operator()(a,b) und lexical_compare::operator()(b, a) true liefern, was gleichbedeutend ist mit a == b. folglich wird ein element nicht einfügt, obwohl es das eigentlich sollte. vorstellbar z.b. bei &quot;angeln - v, i, regulär&quot; vs &quot;Angeln - n, pl von Angel&quot;.</p>
<p>das müsste man sowohl bei einer eigenen funktion/funktor korrigieren (a &lt; A &lt; b &lt; B ...) als auch bei einer eigenen implementation von collate - wenn du das passende locale allerdings auf deinem pc hast (de_DE oder whatever), macht es das automatisch - das verhalten von solchen locales liegt aber außerhalb der definitionsmacht des C++ standards. eine lösung mit multimap wäre nicht zu empfehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303463</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 11 Jun 2007 18:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Tue, 12 Jun 2007 09:18:43 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>nur so nebenbei: locale besitzt selbst einen operator(), der genau dafür gedacht ist.</p>
<pre><code class="language-cpp">map&lt;string,string,std::locale&gt; localized_map(std::locale(&quot;de_DE.UTF-8&quot;));
</code></pre>
</blockquote>
<p>also ich hab das bei mir eingebaut und ich vermute das &quot;de_DE.UTF-8&quot; nicht bei mir existiert.. hab hier ein &quot;deutsches XP&quot; laufen..mit Visual 2005 express (german)als Entwicklungsumgebung. was funktioniert ist</p>
<pre><code class="language-cpp">map&lt;string,string,locale&gt; localized_map;
</code></pre>
<p><strong>ohne</strong> (std::locale(&quot;de_DE.UTF-8&quot;)); &lt;&lt;&lt; wenn ich das einfüge gibs ein runtimeerror mit dem tollen hinweis: <em>&quot;This application has requested the Runtime to terminate it in an unusual way. please contact the application´s support team for more informations. &quot;</em>&lt;&lt; hihi da bin ja dann wohl ich gemeint..</p>
<p>falls ichs weglasse dieses (std::locale(&quot;de_DE.UTF-8&quot;) sortiert der wieder stupide erst grossbuchstaben dann klein.. nun da es wohl schwierig ist ein std: möglichkeit zu finden muss ich wohl oder übel selbst was bauen was die Umlaute richtig einsortiert. irgend ne billig switch case in der art</p>
<pre><code class="language-cpp">string result = str;

	for (size_t i=0; i &lt; result.length(); i++)
	{
		result[i] = tolower(str[i]);

		switch(result[i])
		{
		case 'ä':
			result[i] = 'a';
			break;...
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> .. mal sehn ob ich das hinbekomm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303764</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Tue, 12 Jun 2007 09:18:43 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdigkeiten bei STL::MAP -Erklärung und Hilfe benötigt :) on Tue, 12 Jun 2007 10:19:15 GMT]]></title><description><![CDATA[<p>unter windows heißt das locale vielleicht &quot;German_Germany.1252&quot; (brachte mir eine kurze suche mit google)<br />
bleib mal bei map&lt;string,string,locale&gt; localized_map;<br />
und probier mal am anfang deines program (in der main)</p>
<pre><code class="language-cpp">locale::global(locale(&quot;&quot;));
//und lass dir den namen des locales ausgeben
cout &lt;&lt; &quot;verwende nun &quot; &lt;&lt; locale().name() &lt;&lt; endl;
</code></pre>
<p>ich hab jetzt keinen standard bei mir, aber ich glaube nämlich, dass das globale locale standardmäßig auf das C (=en_US) locale gesetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303812</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 12 Jun 2007 10:19:15 GMT</pubDate></item></channel></rss>