Vektoren Vergleich



  • 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 ); 
    }
    

Anmelden zum Antworten