std::map<std::pair<std::shared_ptr<MyType>, std::shared_ptr<MyType>>, MyOtherType> oder so ähnlich



  • Dann war ich ja zumindest nicht ganz auf dem Holzweg.

    Dass ich durch eine selbst implementierte Vergleichsoperation auch beim Zugriff auf die Elemente unabhängig von der Reihenfolge der beiden Keys werde, hatte ich nicht bedacht.
    Ich stehe zwar noch ein wenig auf dem Schlauch, wie diese Vergleichsoperation dann aussehen muss, aber wenn ich noch ein bisschen drüber nachdenke, werde ich das hoffentlich hinbekommen :-).

    Vielen Dank jedenfalls für den Hinweis.



  • Die Vergleichsfunktion sieht dann ungefähr so aus:

    return std::min(lhs,rhs) < std::max(lhs,rhs);
    


  • ... lol, das war Unfug. Mal brav wieder vergessen.


  • Mod

    fern schrieb:

    ... lol, das war Unfug. Mal brav wieder vergessen.

    Zeigt aber schon, wohin die Reise geht. Man muss das kleinere Element der linken Seite mit dem kleineren Element der rechten Seite vergleichen und bei Gleichheit mit den beiden groesseren Elemente fortfahren.

    "Kleiner" steht hierbei fuer die Ordnungsrelation, egal welche Semantik diese ausdruecken soll.



  • Wenn ich den operator< von std::pair als Grundlage nehme, müsste das so aussehen, denke ich.

    return std::min(lhs.first, lhs.second) < std::min(rhs.first, rhs.second) ||
           (!(std::min(rhs.first, rhs.second) < std::min(lhs.first, lhs.second))&&
           std::max(lhs.first, lhs.second) < std::max(rhs.first, rhs.second);
    


  • std::map<std::pair<std::shared_ptr<MyType>, std::shared_ptr<MyType>>, MyOtherType>
    

    sollte doch gar nicht compilen o.O

    immerhin is da ein Bitshift drin 😉 Schreib lieber

    std::map<std::pair<std::shared_ptr<MyType>, std::shared_ptr<MyType> >, MyOtherType>
    

  • Mod

    Synonym schrieb:

    sollte doch gar nicht compilen o.O

    immerhin is da ein Bitshift drin 😉

    Ich denke, 2014 kann man so langsam C++11 stillschweigend voraussetzen und eher im Gegenteil kenntlich machen, wenn etwas ausdrücklich C++98/TR1 sein soll.



  • SeppJ schrieb:

    Synonym schrieb:

    sollte doch gar nicht compilen o.O

    immerhin is da ein Bitshift drin 😉

    Ich denke, 2014 kann man so langsam C++11 stillschweigend voraussetzen und eher im Gegenteil kenntlich machen, wenn etwas ausdrücklich C++98/TR1 sein soll.

    Hast natürlich recht... habe nicht gesehen das er std::shared_ptr verwendet hatte... Bin schon zu geschädigt von unserer Software

    Ja wir können nur 98/tr1 verwenden
    Ja wir würden gerne was neueres nehmen

    Nein es ist uns leider aus diversen Gründen nicht möglich



  • SeppJ schrieb:

    C++98/TR1

    Hab vorhin nichts gesagt, weil ich weiss, dass du das nicht so gemeint hast, aber jetzt muss ich das tun bevor sich das noch verbreitet:

    Der TR1 ist eine Library Extension für C++03, was ein Sprachbugfix für C++98 war. Daher meintest du C++03/TR1 und nicht C++98/TR1 (was schlicht falsch ist).

    Nebenbei ist std::tr1::shared_ptr auch in C++03 verfügbar.


  • Mod

    Das ist ein '/' im Sinne von 'oder'.



  • SeppJ schrieb:

    Das ist ein '/' im Sinne von 'oder'.

    Was auch seltsam ist, da es beides zwei unterschiedliche Dinge sind. Aber egal, sofern niemand mehr

    wir können nur 98/tr1 verwenden

    behaupt.


  • Mod

    korekturr schrieb:

    SeppJ schrieb:

    Das ist ein '/' im Sinne von 'oder'.

    Was auch seltsam ist, da es beides zwei unterschiedliche Dinge sind.

    http://de.wikipedia.org/wiki//#Schr.C3.A4gstrich_zur_Kennzeichnung_der_Verbindung

    Der Schrägstrich kann zur „Angaben mehrerer (alternativer) Möglichkeiten im Sinne einer Verbindung mit und, oder, bzw., bis oder dergleichen“ verwendet werden,[3] zum Beispiel: Region Leipzig/Halle, das Duo Becker/Stich, im Schuljahr 2014/2015.

    [3] § 106 der amtlichen Regelung der deutschen Rechtschreibung

    Ist mir rätselhaft, wie dir noch nie diese Bedeutung begegnet sein kann. Das wird doch andauernd so benutzt.

    Aber es wird wirklich Offtopic. Jeder weiß, was gemeint ist. Und falls das wirklich noch jemand missverstanden hat, dann hast du es ja nun nochmal ausdrücklich klargestellt.


Anmelden zum Antworten