geeigneter container?
-
hi leute,
ich habe verschiedene float werte, welche ich gruppieren will.
aus meinen berechnungen gehen float werte hervor und diesen gleichen werten will ich jeweils einen index zuweisen.im moment verwende ich sowas in der art:
r = someval; //berechneter wert typedef std::map<float, int> MyMap MyMap mValues; MyMap::iterator mIt; if((mIt = mValues.find(r)) == mValues.end()) mValues[r] = mValues.size();ist das in ordnung so oder würdet ihr was anderes verwenden?
was ich tun muss:
in weiterer folge bekomme ich float werte welche nicht unbedingt gleich den gespeicherten sind. dafür muss ich dann den am nächsten gelegenen float wert finden und dessen index verwenden.
weiters muss ich mit gleichen float werten auch schnell auf den index zugreifen können.ich bin mir nicht wirklich sicher ob das was ich aktuell habe so gut für mein vorhaben geeignet ist.
könnt ihr mir etwas besseres vorschlagen?jperl
ps: ja ich bin mir im klaren, dass direkte vergleiche mit gleitkommazahlen problematisch sind. deswegen frage ich ja auch nach.
-
jperl schrieb:
hi leute,
ich habe verschiedene float werte, welche ich gruppieren will.
aus meinen berechnungen gehen float werte hervor und diesen gleichen werten will ich jeweils einen index zuweisen.im moment verwende ich sowas in der art:
r = someval; //berechneter wert typedef std::map<float, int> MyMap MyMap mValues; MyMap::iterator mIt; if((mIt = mValues.find(r)) == mValues.end()) mValues[r] = mValues.size();ist das in ordnung so oder würdet ihr was anderes verwenden?
mValues.insert(make_pair(r,mValues.size())) erspart die Abfrage und ist effizienter.
jperl schrieb:
was ich tun muss:
in weiterer folge bekomme ich float werte welche nicht unbedingt gleich den gespeicherten sind. dafür muss ich dann den am nächsten gelegenen float wert finden und dessen index verwenden.
weiters muss ich mit gleichen float werten auch schnell auf den index zugreifen können.lower_bound ist dein Freund.
-
camper schrieb:
jperl schrieb:
hi leute,
ich habe verschiedene float werte, welche ich gruppieren will.
aus meinen berechnungen gehen float werte hervor und diesen gleichen werten will ich jeweils einen index zuweisen.im moment verwende ich sowas in der art:
r = someval; //berechneter wert typedef std::map<float, int> MyMap MyMap mValues; MyMap::iterator mIt; if((mIt = mValues.find(r)) == mValues.end()) mValues[r] = mValues.size();ist das in ordnung so oder würdet ihr was anderes verwenden?
mValues.insert(make_pair(r,mValues.size())) erspart die Abfrage und ist effizienter.
jperl schrieb:
was ich tun muss:
in weiterer folge bekomme ich float werte welche nicht unbedingt gleich den gespeicherten sind. dafür muss ich dann den am nächsten gelegenen float wert finden und dessen index verwenden.
weiters muss ich mit gleichen float werten auch schnell auf den index zugreifen können.lower_bound ist dein Freund.
super danke.
jperl
-
Meine persönliche Meinung: float in map = problematisch.
Könntest du nicht evtl. Fixkommazahlen verwenden?
-
hustbaer schrieb:
Meine persönliche Meinung: float in map = problematisch.
Könntest du nicht evtl. Fixkommazahlen verwenden?hm könnte ich evt. machen.
wie komme ich auf eine fixkommazahl?jperl
-
static int64_t const FixPointScale = 1000000; // 6 dezimale Kommastellen static double const FixPointScaleDouble = FixPointScale; double f = something(); int64_t fixPoint = static_cast<int64_t>(f * FixPointScaleDouble);