Je voudrais surcharger la fonction d'échange pour std :: vector des types/objets primitifs. La raison en est un tri lent des vecteurs contenant de gros objets en utilisant std :: sort. Voici l'exemple simple mais ne fonctionnant pas.Tri du vecteur: surcharge swap
#include <vector>
#include <algorithm>
class Point
{
private:
double x, y;
public:
Point(double xx, double yy) : x(xx), y(yy) {}
bool operator < (const Point& p) const
{
return x < p.x;
}
void swap(Point &p)
{
std::swap(*this, p);
}
};
namespace std
{
void swap(Point &p1, Point &p2)
{
p1.swap(p2);
}
}
typedef std::vector<Point> TPoints;
int main()
{
Point p1(0,0);
Point p2(7,100);
TPoints points;
points.push_back(p1);
points.push_back(p2);
//Overloaded metod swap will not be called
std::sort(points.begin(), points.end());
}
Malheureusement, lors de la méthode surchargée std :: sort n'est pas appelée. Je suppose que le vecteur contenant des objets sera la même situation ... Merci pour votre aide ...
duplication possible de [Comment surcharger std :: swap()] (http://stackoverflow.com/questions/11562/how-to-overload-stdswap) –
À part toute autre chose, aucune version de 'swap' est appelé parce que vos points sont déjà commandés. –