-
Vector sortiern?
Hallo,
beim Versuch einen Vector zu sortieren:
Code:
void MyClass::sort(vector< map<string,float> > myVector)
{
for(int i = myVector.size()-1; i>=1; i--)
{
for(int j=0; j<i; j++)
{
if(myVector[j]["value"]<myVector[j+1]["value"])
{
myVector.swap(myVector[j+1],myVector[j]);
}
}
}
}
erhalte ich den Fehler:
error: no matching function for call to `std::vector<std::map<std::string, float, std::less<std::string>, std::allocator<std::pair<const std::string, float> > >, std::allocator<std::map<std::string, float, std::less<std::string>, std::allocator<std::pair<const std::string, float> > > > >::s ...
Was mache ich Falsch und wie kann ich den Vector sortieren?
-
Um eine leichter verständliche Fehlermeldung zu bekommen, würde ich den Vergleich in etwa so auftrennen:
Code:
float value1 = myVector[j]["value"];
float value2 = myVector[j+1]["value"];
if (value1 < value2)
Bzw, sieht dir mal std::sort() an, da kann man für eigene Datentypen auch eigene Vergleichsoperatoren verwenden.
Ciao,
_
-
Oh sorry meine schuld, das hatte ich nicht gesagt. Der Fehler entsteht genau hier:
Code:
myVector.swap(myVector[j+1],myVector[j]);
wie würde denn so ein Vergleichsoperator für std::sort() aussehen?
-
swap() tauscht den Inhalt des Objektes mit dem Parameter des Aufrufs, d.h. es ist eine Methode mit nur einem Parameter.
Du könntest das hier versuchen
Code:
myVector[j+1].swap(myVector[j]);
Ein Vergleichsfunktor ist im wesentlichen eine Klasse mit einem operator() der zwei Parameter hat
Code:
class MyCmparator
{
public:
bool operator()(MyType& a, MyType& b)
{
if (/*kriterium*/)
return true;
return false;
}
};
Ciao,
_
-
Sehr gut so funktioniert es, vielen Dank!