Bonjour,
j'ai voulu faire des tests (en attendant qu'une compil' de 3h termine) sur les fonctions de tri, et les différentes écritures pour voir si à la fin il y allait avoir une grosse différence entre telle ou telle méthode sur le plan des performances.
Le code est encore en chantier mais je n'ai de toute façon pas eu le temps de finir avant de tomber sur une erreur :
Si j'ai bien compris, mon opérateur de comparaison en tant que fonction membre utilise this (qui est de type A* non ?) comme un const A, ce qui fait que la deuxième opérande pour ma comparaison n'est pas au format attendu par std::sort (const A&).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include <iostream> #include <vector> #include <list> #include <algorithm> #include <chrono> class A { int z; public: A(const int& z) : z(z){} const int& getZ() const { return z; } bool operator< (const A& a) { return getZ() < a.getZ();} }; using namespace std; int main() { vector<A> v = { A(1), A(3), A(2), A(4),A(5) }; list<A> l = { A(1), A(3), A(2), A(4), A(5) }; //tests with vector sort(v.begin(), v.end()); //operator< sort(begin(v),end(v)); //operator< sort(v.begin(), v.end(), less<A>()); sort(begin(v), end(v), less<A>()); sort(begin(v), end(v), [](const A& a, const A& b){ return a.getZ() < b.getZ(); }); //tests with list l.sort(); //operator< return 0; }
Ma question est : quelles sont les erreurs dans mon code ? Il se passe plusieurs choses entre l'utilisation de this et la découverte d'une opérande de type const A : quelqu'un pourrait-il me l'expliquer de la manière la plus complète possible (si je ne suis pas HS) ?
Autre question : j'ai voulu mettre z() comme accesseur et le compilo n'accepte pas (pourtant j'étais persuadé d'avoir toujours fait des trucs du style private int x; public const int x() const {return x;}). Suis-je en train de me craquer ou devrais-je pouvoir appeler ma fonction comme ceci ?
Partager