Comment vérifier si une paire de modèles a de la valeur

Dec 01 2020

Je suis en train de coder une structure trie en C ++ avec un extrait de modèle:

pair<char,T>

J'ai une méthode void empty () dans laquelle je veux vérifier si la deuxième valeur de la racine n'est pas définie (la valeur est égale à la valeur du constructeur par défaut ou en détail: les valeurs stockent d'autres types de paires.). Je sais que le constructeur par défaut appliquerait 0 pour le type de données int, mais comment puis-je vérifier cela dans le modèle?

Un autre article mentionnait ceci: return root == new Trie <char, T> () (échec du duo à un opérateur == inconnu)

Merci d'avance

Réponses

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Un std::pairmembre s ne peut pas être "non défini".

Vous pouvez utiliser std::optionalpour modéliser une valeur facultative.


"... la valeur est égale au constructeur par défaut ..."

Bien sûr, vous pouvez vérifier si la valeur actuelle est égale à la valeur initiale:

std::pair<int,int> x;
if (x.first == 0) {
    std::cout << "value of x.first is that of a default constructed std::pair<int,int>";
}

Ou pour le deuxième membre d'un std::pair<int,T>:

if (x.second == T{} ) {
    std::cout << "second has same value as a default constructed T";
}

Exemple complet:

#include <iostream>
#include <utility>

template <typename T>
bool check_if_default_second(const std::pair<int,T>& p) {
    return p.second == T{};
}


int main() {
    std::pair<int,int> p;
    std::cout << check_if_default_second(p);
}