Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » map<string, string> soll nicht sortieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
15.10.2003, 11:49 Uhr
(un)wissender
Niveauwart


Was wäre denn mit einen eindeutigen Hashcontainer(bei Kollision exception)?
Du hast eine Reihenfolge, wenn auch nur nach Hashfunktion(Ergebnis ist dein key) und die bleibt konstant.
Zugriffszeit auf Elemente ist im Schnitt sehr klein mit guter Hashfunktion und einen Container der groß genug ist.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
15.10.2003, 11:59 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
(un)wissender postete
[...]
Das hatte ich auch schon vermutet, aber die Map könnte ja clever sein und sagen, hey, wenn keiner kleiner ist, dann sind sie wohl gleich, und ich degeneriere meinen Baum zu einer linaren Liste!


Vor allem Würde sie Sagen: Wenn die eh alle gleich sind, dann halte ich eben nur einen Key in der Map, weil ich zugriffe übr den Key eh nicht auseinander halten kann...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.10.2003, 12:05 Uhr
(un)wissender
Niveauwart


Ok, für mich gilt wohl:


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
15.10.2003, 12:20 Uhr
(un)wissender
Niveauwart


Mal so dumm gefragt:
Warum wirft map keine exception, wenn zwei Keys gleich sind?
Habe die gnu c++(3.3) STL.
Statt dessen werden undefinierte Sachen gemacht, nicht so toll!

--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.10.2003, 12:23 Uhr
(un)wissender
Niveauwart


Ich bin von der GNU STL ohnehin nicht so begeistert, die implementiert z.B. fill() einfach so *xx = *xxx (in einer Schleife natürlich);
Haha, das kann ich auch und noch besser, der einzige Vorteil ist hier, das fill() Standard ist.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
15.10.2003, 12:31 Uhr
~Frank
Gast


@virtual:

Die Ausgabe soll sein: "Ah, Be, Ce"

D.h. wenn ein Key schon vorhanden ist und nur modifiziert wird, dann soll er seine Position behalten. Wird ein Key gelöscht, dann ruschen alle folgenden automatisch nach vorne. Hinzugefügt können Elemente immer nur am Ende von Cont.

Frank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
15.10.2003, 12:37 Uhr
virtual
Sexiest Bit alive
(Operator)


@unwissender
1. Die Map wirft keine Exception, weil bei einem

C++:
map["a"] = "a";


Der alter Inhalt überschrieben wird. Überhaupt wird dir vermutlich übel werden, wenn Du erkennst, wie der op[] wirklich funktioniert und ihn nur in Ausnahmen verwenden (Es ist hochgradig inperformant).

2. Wie würdest du denn fill() Implementieren?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
15.10.2003, 13:28 Uhr
(un)wissender
Niveauwart


Bei fill() geht es darum, einen Speicherbreich zu füllen, aber ich glaube das soll auch mit nicht squenziell angeordneten Iteratoren funktionieren.

Die Sache ist sicherlich, dass die Implementierung maschinenabhängig wird, aber das ist ok, schließlich sind die IO-Sachen auch zum Teil maschinenabhängig.
memcopy() ist auch oft in asm geschrieben!

Für x86:
Bei sequenziell ist das alles cool, man nimmt die MMX-Register, machtn Prefetch und dann geht es ab.
Schneller gehts nimmer.

Bei nicht squenziell kann man es mit *xx =*xxx machen, es sei den, man weiß tolle Sachen über die Container, was die STL-Leute ja wissen sollten, schliesslich programmieren sie die ja.
Dann kann sich das Wissen zu nutze machen und effizienter kopieren.

*xx=*xxx ist das einfachste und schnellst zu implementierende was man machen kann, allerdings von Effizienzgedanken her traurig.
Stell dir mal vor, ich will so 1.000.000 chars kopieren, da bist aber mit der MMX-Methode ein paar mal so schnell.
Libs sollen so schnell wie möglich sein, weil sie oft genutzt werden.
So entziehst man den Leuten auch ein Argument Dinge selber zu schreiben und nicht die Standardfunktionen zu nutzen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
15.10.2003, 13:32 Uhr
(un)wissender
Niveauwart


Mit CPUID weiß man, ob MMX verfürbar ist, falls jetzt sowas kommt, wie verhalte ich mich, wenn kein MMX da ist.
Man könnte auch SSE nehmen, aber das ist noch zu selten.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 15.10.2003 um 13:32 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
15.10.2003, 13:36 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja,

das kannst Du nur durch partielle Templatespezialisierung umgehen: fill kann ja auch was Komplexes als Füllparameter erwarten. Man müsste dann eben für die primitiven Datentypen eine Spezielle Implementierung finden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: