Vektoren Vergleich



  • Ich habe noch eine Frage:
    es geht um folgenden:
    Ich habe mehrere vektoren v1,v2,v3,v4,......v20.
    Diese Vektoren haben unterschiedliche lange und beinhalten nur zahlen.
    Die Vektoren gehören einen bestimmte Gruppen zB:
    Gruppe A beinhaltet:
    v1,v2,v3,v4...
    Gruppe B :v11,v22,v33,v44....
    Gruppe C: v111,v222,v333,v444.....

    Die Vektoren sind auf Gruppen geteilt.

    Ich möchte in jede Gruppe nach gleiche Datensätze suchen:
    ZB:
    bei Gruppe A:
    die beinhaltet: v1,v2,v3,v4....
    ich möchte alle Vektoren in diese Gruppe durchsuchen, ob Sie die gleiche
    Datensatz beinhalten?
    zB: ob der Zahl 1 als Datensatz sich in Vektoren v1,v2,v3,v4 noch einmal auftritt?

    Meine Idee ist:
    alle Vektoren, die eine Gruppe gehören in einem einzeln Vektor
    V_Gruppe_A kapseln und nur diese Vektor dann durchsuchen.


  • Mod

    Warum nicht einfach iterieren über alle Mitglieder der Gruppe und diese durchsuchen? Das sind zwei Zeilen, die du hier durch ein Riesenkonstrukt ersetzen möchtest.

    for (const auto& vector: group)
      search(vector);
    


  • genau habe ich dich wirklich nicht verstanden.
    sorry 🙄


  • Mod

    MaximGast schrieb:

    genau habe ich dich wirklich nicht verstanden.
    sorry 🙄

    Ich dich leider auch nicht, meine Antwort ist mehr oder weniger geraten, was du möchtest. Vielleicht solltest du dein Problem nochmal beschreiben. Lies dir die Beschreibung danach nochmal genau durch und versetz dich in jemanden, der dein Problem nicht kennt, ob er es anhand der Beschreibung verstehen kann.



  • Hier nochmal:
    Gruppe A beinhaltet die vektoren v1=[1 2 3 4 5 7];
    v2=[8 9 34 55 77 88 99 100]
    v3=[199,123,878,200]
    ....
    Gruppe B beinhaltet die vektoren v11=[34 234 234 234 5 7];
    v22=[21 90 34 534 77 880 10]
    v33=[49,143,878,500]
    ...
    Ich möchte die Vektoren loopen und nach gleiche Datensätze untersuchen?
    es geht darum ZB, ob es der Zahl "1" sich wiederholt hat??

    Ich hoffe, dass ich jetzt gut geklärt habe.



  • Nein???



  • Suchst du etwas wie std::set_intersection?



  • Jaein
    Wie kann ich einfach mehrere Vektoren untersuchen (loopen), ob sie gleiche Datensätze beinhalten?



  • MaximGast schrieb:

    Jaein
    Wie kann ich einfach mehrere Vektoren untersuchen (loopen), ob sie gleiche Datensätze beinhalten?

    Nicht direkt, aber du kannst aus dem Ergebnis von std::set_intersection und dem nächsten Vektor wieder ein std::set_intersection bilden usw. dann bleiben nur die Elemente übrig die in allen Vektoren drin sind.



  • Was genau ist den eine Gruppe? Bestehen Gruppen immer aus genau den selben Vektoren oder sind das auch Container?



  • Gruppen sind Ordnungen (eine Art von Filterung, nach einen bestimmte Prozess)

    Gruppe A,B,C...
    In Jede Gruppe sind mehrere Vektoren
    @TNA Bestehen Gruppen immer aus genau den selben Vektoren?
    --> Ja

    Ich bin jetzt dabei alles Vektoren der jeweiligen Gruppe in einem Vektor zu inserieren--> dann wird dieses Vektor als einen vector betrachtet dann kann ich besser loopen oder?

    Was meint ihr?



  • Woher sollen wir wissen was besser ist wenn wir nicht wissen, wie es jetzt ist?

    Sowie ich das verstehe möchtest du prüfen, ob ein Element in einem Vektor mehrfach vorkommt?



  • MaximGast schrieb:

    Ich bin jetzt dabei alles Vektoren der jeweiligen Gruppe in einem Vektor zu inserieren--> dann wird dieses Vektor als einen vector betrachtet dann kann ich besser loopen oder?

    Ja, prinzipiell sollte es dann mit meinem Ansatz machbar sein.



  • Meinst du irgendwie sowas?

    int main()
    {
    	int v1_tmp[] = {1, 2, 2, 3, 4, 4, 5};
    	int v2_tmp[] = {5, 6, 6, 7, 8, 8, 9};
    	int v3_tmp[] = {9, 0, 0};
    	vector<int> v1( v1_tmp, v1_tmp+7 );
    	vector<int> v2( v2_tmp, v2_tmp+7 );
    	vector<int> v3( v3_tmp, v3_tmp+3 );
    
    	vector<vector<int>> gruppe;
    	gruppe.push_back( v1 );
    	gruppe.push_back( v2 );
    	gruppe.push_back( v3 );
    
    	for(unsigned i=0; i!=gruppe.size(); ++i)
    	{
    		sort( gruppe[i].begin(), gruppe[i].end() );
    		gruppe[i].erase( unique(gruppe[i].begin(),gruppe[i].end()), gruppe[i].end() );
    
    		for(unsigned index=0; index!=gruppe[i].size(); ++index)
    		{
    			int zahl = gruppe[i][index];
    
    			for(unsigned u=i+1; u!=gruppe.size(); ++u)
    				gruppe[u].erase( remove(gruppe[u].begin(),gruppe[u].end(),zahl), gruppe[u].end() ); // Dupplikat löschen, falls vorhanden.
    		}
    	}
    }
    


  • @out
    genau das meine ich danke.
    deswegen die Idee alle vektoren, die eine gruppe gehören in einen einzeln Vektor einfügen und dann auf duplikate überprüfen.

    Danke nochmal 🙂



  • Ich weiß nicht ob ihr das absichtlich macht, aber für mich ist es eindeutig, dass er mehrere Vektoren hat und er überprüfen will ob sie gleiche Elemente beinhalten. Wie das am besten geht ist seine Frage.

    Abstraktionslevel ausreichend? 😉



  • out schrieb:

    Meinst du irgendwie sowas?

    int main()
    {
    	int v1_tmp[] = {1, 2, 2, 3, 4, 4, 5};
    	int v2_tmp[] = {5, 6, 6, 7, 8, 8, 9};
    	int v3_tmp[] = {9, 0, 0};
    und hier folgt dann irgendein für diese Aufgabe aufgeblähter Code.
    
    int main()
    {
        map<int,set<int>> m;
        int v1[] = {1, 2, 2, 3, 4, 4, 5};
        int v2[] = {5, 6, 6, 7, 8, 8, 9};
        int v3[] = {9, 0, 0};
    
        for(int i=0;i<7;++i) m[v1[i]].insert(1);
        for(int i=0;i<7;++i) m[v2[i]].insert(2);
        for(int i=0;i<3;++i) m[v3[i]].insert(3);
    
        ostream_iterator< int > o( cout, " " );
        for(map<int,set<int>>::iterator it=m.begin();it!=m.end();++it)
          if( it->second.size()>1 )
            cout << endl << it->first << " kommt vor in Array Nr. ", copy( it->second.begin(), it->second.end(), o ); 
    }
    

Log in to reply