Getfunction für eine map
-
Hi Leute,
ich bekomme langsam einen Knoten ins Hirn
struct PtEntry { struct InTriangle { int triangle; Point projected; double dist; InTriangle(int triangle_, const Point& projected_, double dist_) : triangle(triangle_), projected(projected_), dist(dist_){} }; list<InTriangle> entries; inline double getDest() {return dist;} void addNode(int triangle_, const Point& projected_, double dist_) { InTriangle node(triangle_, projected_, dist_); entries.push_back(node); } void clear(int triangle_, const Point& projected_, double dist_) { entries.clear(); } };nun erstelle ich eine map
map<unsigned long, PtEntry> projectInTriangleMap;
und kann dann über :
entry.addNode(*j, projected, distance ); projectInTriangleMap.insert(make_pair(index, entry));auch Dinge in die map knallen
nur mein getDest funktioniert nicht, da die Variable ja in dem falschen struct definiert worden ist. Die über InTriangle::dist geht ja auch nicht.
Ich steh grad auf dem Schlauch.
Danke im Vorraus
-
Welches dist soll denn auch von PtEntry::getDest() zurückgegeben werden? dist ist eine Variable von InTriangle und ein PtEntry-Objekt hält beliebig viele InTriangle-Objekte in einer Liste. Also hat ein PtEntry-Objekt auch beliebig viele verschiedene dist-"Member". Welches willst du denn dann mit getDest() liefern?
BTW: Ich find deine Namenswahl nicht so schön. Was heißt "Pt" bei PtEntry? projected ist ein Adjektiv und kein Nomen, wie man es bei einem Point-Objekt erwartet (wenn ich den Datentyp von projected raten müsste, würde ich bool sagen). triangle ist vom Typ int, aber wie soll ein Dreieck eine Ganzzahl sein? getDest gibt dist zurück etc.
-
ja ich will aus der map zu einem bestimmten Schlüssel das dist aufrufen können.
ja projected soll heißen "schon projeziert" und int triangle, weil es nur die nummer des Dreiecks angibt
-
Dann musst du noch den Schlüssel mitübergeben und nach diesem suchen:
double getDist(const Key& myKey) { list<InTriangle>::iterator iter = find(entries.begin(), entries.end(), myKey); if(iter == entries.end()) nicht gefunden. Exception werfen oder irgendnen Defaultrückgabewert else return iter->dist; }Necrofighter schrieb:
ja projected soll heißen "schon projeziert"
Warum ist das dann ein Point-Objekt und kein bool?
und int triangle, weil es nur die nummer des Dreiecks angibt
Wie wärs mit
id?
-
Natürlich. Nur gibts entries.find nicht, entries ist ja vom Typ List
aber war eigentlich logisch dass es über ein objekt gehen muss
naja da werden x,y,z von projected gespeichert
Ich schriebe also noch eine find function dann sollte es ja eigentlich klappen.
Kann man die map nicht iwie einfacher gestalten, sodass ich einfach eine Getfunction hinschreiben kann, ohne den ganzen Aufwand?
Also eine Map in die zu jedem Key eine Liste gespeichert werden soll.
Ich bekomms nicht besser hin, und so ist die Getfunction zu schreiben reine Hölle für einen Neuling.
-
Necrofighter schrieb:
Natürlich. Nur gibts entries.find nicht, entries ist ja vom Typ List
Habs schon geändert. Du brauchst dann noch den Header <algorithm>.
naja da werden x,y,z von projected gespeichert
Und wie sieht das Objekt aus, wenn noch keine Projektion stattgefunden hat?
Kann man die map nicht iwie einfacher gestalten, sodass ich einfach eine Getfunction hinschreiben kann, ohne den ganzen Aufwand?
Also eine Map in die zu jedem Key eine Liste gespeichert werden soll.
Dafür gibt es, glaubs oder nicht, den Datentype std::map
Wenn deine Schlüssel einfach nur die Zahlen 0,...,n sind, dann kannst du das auch über einen std::vector machen.Wenn es zu einem Schlüssel mehrere Werte geben können soll, schau dir std::multimap an.
-
Ich danke dir schonmal....jetzt weint der Compiler noch weil Key natürlich nirgends definiert ist...
der Punkt wurde da schon projeziert
die Punkte werden auf verschiedene Dreiecke projeziert und ich will die Entfernungen speichern, um dann den kürzesten Abstand auszuwählen.
-
Necrofighter schrieb:
Ich danke dir schonmal....jetzt weint der Compiler noch weil Key natürlich nirgends definiert ist...
Ich wusste nicht, was du als Key benutzen willst. Du kannst daraus z. B. int machen und dann die id übergeben.
der Punkt wurde da schon projeziert

Auch wenn ich die Funktion der Variablen nicht ganz verstehe: Wie wärs mit dem Namen
projection?Zum Sinn der Variablen: Du sagst durch die Member-Beziehung, dass ein Dreieck eine Projektion vom Typ
Pointhat. Wie sieht denn eine Projektion eines Dreiecks auf einen Punkt aus (vorausgesetzt, wir reden über denselben Raum)?
-
Nein Point projected gibt mir die Koordinaten des projezierten punktes auf das Dreieck mit der Nummer *j aus.
Daher steht in der Map dann:
First: Index des Punktes
Second: Index vom Dreieck,
Koordinaten des Punktes nach projektion auf das Dreieck
Abstand Ausgangspunkt zum Projezierten Punkt