So überprüfen Sie, ob ein Vorlagenpaar einen Wert hat

Dec 01 2020

Ich codiere eine Trie-Struktur in C ++ mit einem Template-Snippet:

pair<char,T>

Ich habe eine Methode void empty (), in der ich überprüfen möchte, ob der zweite Wert des Stamms nicht festgelegt ist (Wert entspricht dem Standardkonstruktorwert oder im Detail: Werte würden andere Paartypen speichern.). Ich weiß, dass der Standardkonstruktor 0 für den Datentyp int anwenden würde, aber wie kann ich dies in der Vorlage überprüfen?

Ein anderer Beitrag erwähnte dies: return root == new Trie <char, T> () (fehlgeschlagenes Duo zu unbekanntem == Operator)

Danke im Voraus

Antworten

1 largest_prime_is_463035818 Dec 01 2020 at 01:04

Ein std::pairMitglied kann nicht "nicht gesetzt" sein.

Sie können std::optionaleinen optionalen Wert modellieren.


"... Wert ist gleich Standardkonstruktor ..."

Natürlich können Sie überprüfen, ob der aktuelle Wert dem ursprünglichen Wert entspricht:

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>";
}

Oder für das zweite Mitglied eines std::pair<int,T>:

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

Vollständiges Beispiel:

#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);
}