Strings von Objekten vergleichen und ändern



  • @Lennox sagte in Strings von Objekten vergleichen und ändern:

    @Finnegan sagte in Strings von Objekten vergleichen und ändern:

    Wie würdest du das denn stattdessen "sauber" implementieren

    Das habe ich doch schon vorgeschlagen:

    @Lennox sagte in Strings von Objekten vergleichen und ändern:

    seen[base]++;
    c->displayName = base + " (" + std::to_string(seen[base]) + ")";

    Der unordered_map-Zugriff hat O(1), der Zugriff auf ein n auch...

    @Finnegan sagte in Strings von Objekten vergleichen und ändern:

    Ich weiß ja nicht, ich empfinde eher solche überflüssigen Zeilen als schlechten Stil.

    Du hast doch diese zusätzlichen Zeilen in deinem Beispiel hinzugefügt/verwendet...

    Ha! Jo, ich habe etwas zu schnell gelesen. Dein Code is schon korrekt (dachte zuerst er sei es nicht), aber zwei Zugriffe auf eine Datenstruktur finde ich persönlich eben nicht "besser". Die ganzen "O von irgendwas" sind nämlich mit Vorsicht zu genießen: Hier muss z.B. zwei Mal der Hash des String berechnet werden. Es wäre daher sowas hier effizienter:

    auto& count = seen[base];
    count++;
    c->displayName = base + " (" + std::to_string(count) + ")";
    

    seen[base] noch einmal "zu mappen/kapseln" und in eine zusätzliche Variable n zu stecken, bringt eigentlich keine Vorteile. Du hast eine Variable mehr, die Übersichtlichkeit erhöht sich nicht wesentlich - und da es nur einen lesenden Zugriff gibt, wäre es sogar geboten, hier strikt zu in-linen.

    Das n stammt nicht von mir. Mein Code sah so aus (weiter oben):

    std::format_to(std::back_inserter(creature.displayName), " ({})", ++seen[creature.displayName]);
    

    Das ist nicht nur auch ++i, sondern vermutlich sogar noch "kryptischer" für dich 😉
    Aber das ist wie ich denke Ansichtssache. Es gibt deutlich wildere Konstrukte, bei denen ich dir da sicherlich auch recht geben würde, aber ich finde sowas hier noch völlig in Ordnung. Das sollte in meinen Augen jeder lesen können, der ernsthaft C++ machen will.



  • Oha, liebe Leute, hier hat sich ja was entwickelt!
    Auch deine Lösung ist toll, Finnegan. Tatsächlich muss ich mir "Ranges" noch mal genauer anschauen. Performance ist uninteressant, es handelt sich eher um eine persönliche Machbarkeitsstudie als um ein ernsthaftes Projekt. Dennoch möchte ich natürlich lernen, wie man performanten Code schreibt. Momentan ist der Rest der Anwendung aber so extrem ineffizient geschrieben, dass die paar 2D-Pixelgrafiken auf einem 14700K und RTX 5060 Ti mit ~45 FPS laufen 😂 🤣
    Somit machen ein paar µSekunden durch irgendwelche Strings und Views den Kohl auch nicht mehr fett 😉

    @Finnegan sagte in Strings von Objekten vergleichen und ändern:

    Nimm daher am besten die Lösung, die dir am besten gefällt und/oder die du am besten nachvollziehen kannst

    Genau das mache ich.
    Vielen Dank an alle!



  • @thuering sagte in Strings von Objekten vergleichen und ändern:

    die paar 2D-Pixelgrafiken auf einem 14700K und RTX 5060 Ti mit ~45 FPS laufen 😂 🤣

    Du bist nicht der einzige mit solchen Problemen. Ich habe schon etliche Spiele gesehen, die es nicht schaffen, die GPU ausreichend schnell mit Daten zu füttern. Da trödelt die Grafikkarte bei 30% Auslastung rum und die Framerate ist trotzdem grottig. Das ist nicht leicht, sobald es ein wenig komplexer wird 😉


Anmelden zum Antworten