Struct // Map
-
Hallo,
ich habe mir eine Klasse erstellt, um KFZ-Kennzeichen zu verwalten.
Dabei habe ich mir ein Struct angelegt, was Einwohner, Name Landkreis und Verwaltungssitz enthält.
Dieses soll als Value definiert sein.Desweiteren hab ich mir eine Map angelegt, wo ich die Kennzeichen als Key zuweise.
Jetzt war meine Idee, wo ich nichts finde, ob das überhaupt geht, der Map ein Struct zuzuweisen.
Funktioniert das irgendwie? Oder mache ich es mir zu schwer?
-
Natürlich geht das...
struct KennzeichenInfo {...}; std::map<std::string, KennzeichenInfo> kennzeichenInfos; KennzeichenInfo info(...); kennzeichenInfos["A-BC 1234"] = info;
-
Du kannst auch eine normale Klasse als Key für einen assoziativen Container verwenden, für sie muss nur der
operator<
und deroperator==
überladen werden.
-
Hacker schrieb:
Du kannst auch eine normale Klasse als Key für einen assoziativen Container verwenden, für sie muss nur der
operator<
und deroperator==
überladen werden.Eigentlich nur operator<. Äquivalenz wird mittels !(a < b) && !(b < a) geprüft.
-
LordJaxom schrieb:
Hacker schrieb:
Du kannst auch eine normale Klasse als Key für einen assoziativen Container verwenden, für sie muss nur der
operator<
und deroperator==
überladen werden.Eigentlich nur operator<. Äquivalenz wird mittels !(a < b) && !(b < a) geprüft.
Ja, stimmt. Ich hab nur gerade nochmal aus Spaß getestet und es ging irgendwie nicht ohne... jetzt ist mir aufgefallen ich hab falsch getestet
-
Hacker schrieb:
Ich hab nur gerade nochmal aus Spaß getestet ...
Du solltest Dir doch einen Ferienjob suchen.
-
Belli schrieb:
Hacker schrieb:
Ich hab nur gerade nochmal aus Spaß getestet ...
Du solltest Dir doch einen Ferienjob suchen.
Näh, ich hab schon noch ein Miniprojekt (3D-Spiel) am Laufen. Aber ohne Scheiß... 10-Stunden am Tag sind wohl doch noch etwas zu viel.
Zurück zum Thema: Das Thema ist gelöst, oder...
-
Hacker schrieb:
Zurück zum Thema: Das Thema ist gelöst, oder...
vermutlich schon. Vielleicht meldet sich KeinNameMehrFrei nochmal, ob er jetzt glücklich ist - evtl. liegen seine Probleme ja auch ganz woanders...
-
Sorry, hatte leider noch keine Zeit zum testen.
Aber was ist denn die schönere Lösung, in einer extra Klasse, oder als Struct?
-
KeinNameMehrFrei schrieb:
Aber was ist denn die schönere Lösung, in einer extra Klasse, oder als Struct?
Ich glaube du hast da was missverstanden.
Der einzige semantische Unterschied zwischen
class
undstruct
besteht in den default-sichtbarkeiten (struct public
,class private
). Ich aber denke beistruct
eher an Datenstrukturen als an Klassen, ist aber auch Geschmackssache.
-
Hacker schrieb:
Der einzige semantische Unterschied zwischen
class
undstruct
besteht in den default-sichtbarkeiten (struct public
,class private
).Und die standardmäßige
public
Vererbung beistruct
bzw. die standardmäßigeprivate
Vererbung beiclass
.
-
Ich hab da noch eine andere Frage. Und zwar wenn ich eine Map anlege
map<string, string, string, string> _map_;
_map_["hallo"] = "du", "da", "der";
Kann man dann auf du, da und der einzeln zugreifen?
-
Und irgendwie hab ich noch das Problem, dass ich in einem Struct suchen will..
-
map<string, string, string, string>
Biste vollkommen übergeschnappt? Was soll denn hier Key und was Value sein?
-
Ja, hab gemerkt, dass das wohl nicht so funktioniert wie ich dachte.
-
Kann mir jemand sagen, warum dieses nicht geht?
map<string, string >::iterator it; it = kfz.find(eingabe);
-
map<string, string >::iterator it; it = kfz.find(eingabe);
Eine Möglichkeit wäre, dass kfz
const
ist.
Die andere, dass der Typ von kfz nichtstd::map<std::string, std::string>
ist...Zeig mal Code oder Fehlermeldung. Wenn du einfach schreibst, "funktioniert nicht", kann man doch nur abschätzen wo der Fehler ist
-
int main() { string eingabe; cout << "Kennzeichen (AA-BB-123): "; cin >> eingabe; const int N = 5; const char* x[N] = {"hr", "mr", "kb", "ks", "ab"}; string s = ""; int i = 0; i = eingabe.find("-", 0); s = eingabe.substr(0,i); map< string, Info> kfz; //Als Value Info hr() //Schauen, ob der Landkreis vorhanden ist map<string, string>::iterator it; it = kfz.find(); system("pause"); return 0; }
-
Na ist doch klar: Die Iteratoren lassen sich (selbstverständlich) nicht ineinander konvertieren. Du musst schon
map<string, Info>::iterator it;
schreiben, oder noch besser (C++11 !):
auto it = kfz.find(eingabe)
Google mal automatic type deduction.
Edit: Immer diese Flüchtigkeits-Rechtschreibfehler...
-
Ah, ja. Jetzt macht es Sinn, danke.
Hab noch eine (doofe) Frage. Und zwar, wenn ich das
const char* A = ...
anlege, müsste es ja möglich sein, dass ich dann in meiner Map auf das A als Key zugreife?
Also ich gebe HR ein, es wird aufgesplittet und dann möchte ich da auf mein Struct zugreifen,,