map <int, vector < struct > > Sortieren



  • Hallo Freunde,
    Also wenn ich einen Vector von Strukturen habe kann ich mit

    sort(vec.begin(), vec.end(), meineStruktur() );
    

    und der funktion

    bool operator () (const meineStruktur& a, const meineStruktur& b)
        {
            return (a.value2< b.value2);
        }
    

    in der Struktur das ganze nach value2 sortieren.

    Wie sieht das aus wenn ich das ganze noch in eine map reintue
    folgendes hatte ich schon probiert:

    for( map<int, vector<meineStruktur> >::const_iterator mapWalker =
                    mapData.begin(); mapWalker != mapData.end(); ++mapWalker )
        {
            for( vector<meineStruktur>::const_iterator vecWalker = mapWalker->second.begin();
                        vecWalker != mapWalker->second.end(); ++vecWalker )
            {
                sort( mapWalker->second.begin(), mapWalker->second.end(), meineStruktur() );
            }
        }
    

    geht aber net der compiler schmeisst:

    |2131|error: passing 'const meineStruktur' as 'this' argument of 'meineStruktur& meineStruktur::operator=(const meineStruktur&)' discards qualifiers|
    

    geht das überhaupt was ich da vorhabe eigentlich schon . Ne map ist ja schon sortiert, ich will aber die struct in dem vector sortieren müsste doch gehen oder???



  • const_iterator -> iterator
    ändern?



  • geht das überhaupt was ich da vorhabe eigentlich schon

    Ich weiss nicht, wass du vor hast. Beschreibe bitte in Worten, was du vor hast, und gib dir Muehe.



  • ismaild schrieb:

    Wie sieht das aus wenn ich das ganze noch in eine map reintue

    Warum willst du das in eine Map reintun? Was möchtest du damit erreichen?

    Könnte es sein, dass du std::multimap suchst?



  • Sag mal Ich frage ganz net und höfflich dieses lapidare gib dir muehe klingt richtig blöd.

    Besteht mein Posting etwa aus drei worten, ist die Semantik nicht klar was ich da vorhabe.

    Also Ich habe ein Strukt mit integer Werten einer davon ist value2.
    Jetzt habe ich ganz viele davon in einem vector, welche aber nochmal in einer map nach key sortiert oder unterteilt ist wie Du möchtest. Da die map ja automatisch nach key sortiert ist wollte ich die strukturen im vector nochmal sortieren.

    Logik ist in etwa so:

    Map->Vector
    1 ->1
    ->2
    ->3
    ->4
    2 ->1
    ->2
    ->3
    ->4
    3 etc..
    4
    5
    6
    sonst noch fragen.



  • for( map<int, vector<meineStruktur> >::iterator mapWalker =
                    mapData.begin(); mapWalker != mapData.end(); ++mapWalker )
        {
    
                sort( mapWalker->second.begin(), mapWalker->second.end(), meineStruktur() );
    
        }
    


  • @ l'abra d'or

    Hat geholfen danke.

    Also was ich eigentlich will ist folgendes.

    Ich habe eine menge aus Daten sagen wir zeilen aus einem textfile welche gewisse werte besitzt die ich für meine selektion ranziehe.
    Nun parse ich das file und packe die werte sozugane als preselektion in einen vector welche dem key der map genüge tut. Nachher ich ich durch bin habe ich meine Kategorien welche nach key popularisiert ist, will aber nachher eine etage tiefer nochmal sortieren im vector nach einem integer value im struct.

    Das war es was ich wollte...

    Einer ein bessere und flexiblerere Lösung??



  • Uiiii das Sortieren dauert übel lange ....



  • @ Fellhuhn

    Ok danke diese version beschleunigt das ganze enorm...



  • Besteht mein Posting etwa aus drei worten, ist die Semantik nicht klar was ich da vorhabe.

    Codefetzen sind keine Problembeschreibung. Nimmt man sie weg, dann bleibt nicht viel uebrig.



  • Siehste mir gings eigentlich nur um den Fetzen. Da lag mein Problem...

    Aber egal keine Ahnung was Du vor hast...

    Trotzdem danke und "May the force be with you" ;o))))


Anmelden zum Antworten