Pour utiliser une carte, il semble qu'une fonction de comparaison soit nécessaire. Dans l'exemple suivant, le tableau c en tant que membre de la classe a quatre éléments comme c [4].

Question] Quand c [100], quelle est la meilleure façon d'écrire l '' opérateur <'de manière compacte?

class Configuration {
public:
    int c[4];
    bool operator<(const Configuration& other) const {
        if(c[0] == other.c[0]) {
            if(c[1] == other.c[1]) {
                if(c[2] == other.c[2]) {
                    return c[3] < other.c[3];
                }
                return c[2] < other.c[2];
            }
            return c[1] < other.c[1];
        }
        return c[0] < other.c[0];
    }
};

Merci d'avance.

0
K.Epf 20 avril 2017 à 10:42

3 réponses

Meilleure réponse

Il existe une fonction standard pour cela: lexicographical_compare(std::begin(c), std::end(c), std::begin(other.c), std::end(other.c)).

2
MSalters 20 avril 2017 à 08:45

C'est l'un des nombreux endroits où std :: array est juste mieux qu'un tableau C.

class Configuration {
public:
    std::array<int, 100> c;
    bool operator<(const Configuration& other) const {
        return c < other.c
    }
};
2
Caleth 20 avril 2017 à 08:40
class Configuration {
public:
    int N = 100;
    int c[N];
    bool operator<(const Configuration& other) const {
        int i = 0;
        for (; i != (N - 1); ++i) {
            if (c[i] != other.c[i]) break;
        }
        return c[i] < other.c[i];
    }
};
0
Nir Friedman 20 avril 2017 à 07:46