Ich finde keine Alternative zu "If Bedingung"



  • wxSkip schrieb:

    Switch-Anweisungen funktionieren aber nur mit built-in-Typen (kenne jetzt nicht die genaue Bezeichnung, jedenfalls aber nicht mit C-Strings oder std::string).

    Die Bezeichnung lautet Ganzzahlen; Aufzählungen mit eingeschlossen.



  • Genau, switch funktioniert eben nur bei Typen, die entweder int sind oder sich nach int konvertieren lassen. Ansonsten gibt's wohl nichts, was man als Alternative verwenden könnte - zumindest nichts, was ein Anfänger verstehen würde.^^

    mfg



  • Incocnito schrieb:

    zumindest nichts, was ein Anfänger verstehen würde.^^

    Was ist an einer Map so schwer zu verstehen, dass man sie einem Anfänger nicht zutrauen kann?

    #include <map>
    #include <string>
    #include <iostream>
    #include <ostream>
    
    typedef std::map<std::string, std::string> Buch;
    
    int main()
    {
        Buch woerterbuch;
        woerterbuch["Begriff"] = "bezeichnet man üblicherweise den Bedeutungsinhalt z. B. eines sprachlichen Ausdrucks oder einer Vorstellung";
        // usw fuer alle Begriffe...
    
        std::string abfrage = "Begriff";
        Buch::iterator ergebnis = woerterbuch.find(abfrage);
        if (ergebnis != woerterbuch.end())
            std::cout << abfrage << " bedeutet: " << ergebnis->second << std::endl;
        else
            std::cout << abfrage << " Wort wurde nicht gefunden!" << std::endl;
    
    }
    


  • Au ja, Iteratoren und STL sind für jeden Anfänger selbstverständlich total einleuchtend.



  • ich bin mir nichtmal sicher ob sein wort ein std::string ist ^^



  • Incocnito schrieb:

    Au ja, Iteratoren und STL sind für jeden Anfänger selbstverständlich total einleuchtend.

    Auf jeden Fall intuitiver zu bedienen als irgendwelches C-Zeugs. Wobei ich auch nirgendwo erkennen kann, wo man das Geheimnis eines Iterators verstanden haben muss, um das Problem zu lösen. Iteratoren sind maximal notwendig, wenn man die vorhandenen Paare ermitteln will. Also erst interessant, wenn er sich an die GUI-Lösung wagen will. Und dabei wird nicht mehr Wissen vorausgesetzt, als ich bei der Lösung mit C-Arrays nicht auch bräuchte. Was nebenbei auch erschlagen sein dürfte, wenn er GUIs programmieren kann.
    Der Iterator um an das Paar über find() zu kommen ist unnötig, man könnte auch einfach über den Index-Operator ganz klassisch drauf zugreifen. Ist für den Anfänger sicher besser. Aber das find() ist jetzt nicht so kompliziert und im Forum findet sich auch sicher jemand, der einem hilft. So dass man sich nicht unnötig die Map mit Missmatchs zumüllen muss.



  • Also noch die Version, ohne Iterator.

    #include <map>
    #include <string>
    #include <iostream>
    #include <ostream>
    
    typedef std::map<std::string, std::string> Buch;
    
    int main()
    {
        Buch woerterbuch;
        woerterbuch["Begriff"] = "bezeichnet man üblicherweise den Bedeutungsinhalt z. B. eines sprachlichen Ausdrucks oder einer Vorstellung";
        // usw fuer alle Begriffe...
    
        std::string abfrage = "Begriff";
        std::string ergebnis = woerterbuch[abfrage];
        if (ergebnis.length() == 0) // Begriffserklaerung ist leer
            std::cout << abfrage << " wurde nicht gefunden!" << std::endl;
        else
            std::cout << abfrage << " bedeutet: " << ergebnis << std::endl;
    }
    


  • Paul Müller schrieb:

    Also noch die Version, ohne Iterator.

    #include <map>
    #include <string>
    #include <iostream>
    #include <ostream>
    
    typedef std::map<std::string, std::string> Buch;
    
    int main()
    {
        Buch woerterbuch;
        woerterbuch["Begriff"] = "bezeichnet man üblicherweise den Bedeutungsinhalt z. B. eines sprachlichen Ausdrucks oder einer Vorstellung";
        // usw fuer alle Begriffe...
    
        std::string abfrage = "Begriff";
        std::string ergebnis = woerterbuch[abfrage];
        if (ergebnis.length() == 0) // Begriffserklaerung ist leer
            std::cout << abfrage << " wurde nicht gefunden!" << std::endl;
        else
            std::cout << abfrage << " bedeutet: " << ergebnis << std::endl;
    }
    

    Uh. Bin ganz und garnicht begeistert von dieser Version, jede erfolglose Suche erzeugt einen Eintrag und bläht die map unnötig auf. Dann doch lieber bei Iteratoren bleiben und bei Bedarf deren Konzept erklären.



  • Paul Müller schrieb:

    Incocnito schrieb:

    zumindest nichts, was ein Anfänger verstehen würde.^^

    Was ist an einer Map so schwer zu verstehen, dass man sie einem Anfänger nicht zutrauen kann?

    #include <map>
    #include <string>
    #include <iostream>
    #include <ostream>
    
    typedef std::map<std::string, std::string> Buch;
    
    int main()
    {
        Buch woerterbuch;
        woerterbuch["Begriff"] = "bezeichnet man üblicherweise den Bedeutungsinhalt z. B. eines sprachlichen Ausdrucks oder einer Vorstellung";
        // usw fuer alle Begriffe...
    
        std::string abfrage = "Begriff";
        Buch::iterator ergebnis = woerterbuch.find(abfrage);
        if (ergebnis != woerterbuch.end())
            std::cout << abfrage << " bedeutet: " << ergebnis->second << std::endl;
        else
            std::cout << abfrage << " Wort wurde nicht gefunden!" << std::endl;
    
    }
    

    Vielen dank Paul.
    Aber ist dieses Verfahren überhaupt effizient.
    Ich bin zwar noch Anfänger, aber ich würde gerne wissen, ob diese Methode bei mehreren Hundert Tausend Wörterbuch einträgen funktioniert oder einfach nur langsam arbeitet ?


  • Mod

    Costguard schrieb:

    Aber ist dieses Verfahren überhaupt effizient.

    Das ist sogar sehr effizient.

    Ich bin zwar noch Anfänger, aber ich würde gerne wissen, ob diese Methode bei mehreren Hundert Tausend Wörterbuch einträgen funktioniert oder einfach nur langsam arbeitet ?

    Ganz locker ausreichend. Wenn es dir wirklich um jede Mikrosekunde geht, könntest du auch einen Hashtable benutzen.


Anmelden zum Antworten