Suchen in vector<pair<T1,T2>>



  • volkard schrieb:

    in eine map kopieren, suchen, und die map wieder löschen.

    Wollte das noch einmal Zitieren. So ist es bei großem Datenumfang schneller! Wie groß ist denn dein vector?

    MfG SideWinder



  • hmmmmmmm schrieb:

    SideWinder schrieb:

    std::vector<int> vec;
    int to_find = 5;
    find_if(vec.begin(), vec.end(), [to_find](int x) { return x == to_find; });
    

    MfG SideWinder

    Braucht das C++0x? Geht das mit VC++2010?

    Ja. Ja.

    MfG SideWinder



  • Wobei man im Fall mit int -Elementen auch gleich

    std::find_if(vec.begin(), vec.end(), [] (int x) { return x == 5; });
    

    oder noch einfacher

    std::find(vec.begin(), vec.end(), 5);
    

    schreiben könnte 😉



  • bla sah mir nicht nach Compile-Time-Konstante aus :p

    MfG SideWinder



  • Noch schöner wäre es natürlich wenn man darüber hinaus C# in C++ eingebaut hätte 🤡

    int to_find = 5;
    var result = vec.SingleOrDefault(elem => elem == to_find);
    

    Ich will ja nicht spammen, aber ich darf nun wieder in C# programmieren, und die Sprache selbst ist wohl eine der schönsten die ich je gesehen habe 😋

    MfG SideWinder



  • Wo ist da der grosse Unterschied zu C++, abgesehen von der Syntax? Statt var kannst du auto verwenden, und eben einen Lambda-Ausdruck. Mit Boost.Lambda ginge es vielleicht noch ein wenig schöner, aber dafür brauchst du schwarze Magie 😉

    Was allerdings wirklich unschön ist, dass man für 70% der STL-Algorithmen immer Argumentpaare container.begin(), container.end() übergeben muss. Mit Ranges geht das etwas besser, aber die haben sich halt nicht wirklich etabliert...



  • 2 Klammern statt 12 bspw? 🙂

    MfG SideWinder



  • Mit boost.range und boost.lambda/boost.phoenix:

    find_if(vec, _1 == to_find);
    

    So schön ist C# auch wieder nicht. Gerade bei den Suchmethoden fehlen mir in C# beispielsweise die Iteratoren. Aber eine C++ vs. C# Diskussion hatten wir schonmal.



  • ipsec schrieb:

    Mit boost.range und boost.lambda/boost.phoenix:

    find_if(vec, _1 == to_find);
    

    Genehmigt. So sieht das hübsch aus. Ob man _1 mag oder nicht, aber das ist jedenfalls mal bündig 👍

    Edit@ipsec: Hast du den Link dazu?

    MfG SideWinder



  • SideWinder schrieb:

    Ich will ja nicht spammen, aber ich darf nun wieder in C# programmieren, und die Sprache selbst ist wohl eine der schönsten die ich je gesehen habe 😋

    Da muss ich ihm leider zustimmen. Ich find C# auch von Tag zu Tag schöner 🙂



  • SideWinder schrieb:

    Edit@ipsec: Hast du den Link dazu?

    Zu der Diskussion? Das war im "Was würdet ihr an C++ verbessern"-Thread, wenn es auch dort etwas abgewürgt wurde. Hier gehört das auch nicht rein. Wenn du magst, kannst du aber gerne einen neuen C++ vs C#-Thread eröffnen.



  • ipsec schrieb:

    SideWinder schrieb:

    Edit@ipsec: Hast du den Link dazu?

    Zu der Diskussion? Das war im "Was würdet ihr an C++ verbessern"-Thread, wenn es auch dort etwas abgewürgt wurde. Hier gehört das auch nicht rein. Wenn du magst, kannst du aber gerne einen neuen C++ vs C#-Thread eröffnen.

    Da habe ich ja sogar rege daran teilgenommen. Danke für den Link.

    MfG SideWinder


Anmelden zum Antworten