vector<T> joinen



  • Auf die Schnelle,eventuell geht es noch einfacher:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    int main()
    {
     const std::vector<int> v1 {3,4,1,5};
     const std::vector<int> v2 {2,4,5,1,6,7};
     const std::vector<int> v3 = ([&v1,&v2]()->std::vector<int> 
     {
      std::vector<int> result;
      std::set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),std::back_inserter(result));
      std::sort(result.begin(),result.end());
      auto new_end = std::unique(result.begin(),result.end());
      return std::vector<int>(result.begin(),new_end);
     })();
      std::for_each(v3.begin(),v3.end(),[](int i) { std::cout << i << ' ';});
     return 0;
    }
    

  • Mod

    einwurf schrieb:

    Auf die Schnelle,eventuell geht es noch einfacher:
    ...

    set_union erfordert bereits sortierte Eingangssequenzen. Das Sortieren muss also ggf. bereits vorher durchgeführt werden.



  • Ich brauche weder Sortieren noch Unique.



  • So:

    #include <vector>
    #include <set>
    
    int main()
    {
        std::vector<float> const v1(...);
        std::vector<float> const v2(...);
    
        std::set<float> union_set;
        union_set.insert(v1.begin(), v1.end());
        union_set.insert(v2.begin(), v2.end());
    
        //wenn es denn ein const vector sein muss...
    
        std::vector<float> const union_vector(union_set.begin(), union_set.end());
        //fertig    
    }
    


  • Michael E. schrieb:

    Das ist leider nur eine maximal umständliche Version, zwei Container hintereinanderzuhängen.

    Sie ist vielleicht umständlich, aber wenigstens cool.

    Michael E. schrieb:

    Mit der sortierten Vereinigung hat das gar nichts zu tun.

    Er hat nie was von sortierter Vereinigung gesagt, folglich ist das genau das erfragte.



  • 314159265358979 schrieb:

    Er hat nie was von sortierter Vereinigung gesagt, folglich ist das genau das erfragte.

    In einer Vereinigung gibt es keine Doubletten, ob sie nun sortiert ist, oder nicht.



  • 314159265358979 schrieb:

    Er hat nie was von sortierter Vereinigung gesagt, folglich ist das genau das erfragte.

    Constructs a sorted range beginning in the location pointed by result with the set union of the two sorted ranges [first1,last1) and [first2,last2) as content.

    bluber22 schrieb:

    Ja, das meine ich.



  • Na gut, ausnahmsweise. Mein Iterator ist trotzdem cooler als irgendein Algorithmus! 😃



  • Aber .. ?

    Ich brauche weder Sortieren noch Unique.
    


  • Warum geht folgendes nicht?

    template <typename ListType> inline ListType append(const ListType& v1, const ListType& v2)
    {
    	ListType result;
    	set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(result));
    	return result;
    }
    

Anmelden zum Antworten