Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Vector sortiern?

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.04.2006
    Beiträge
    13

    Vector sortiern?

    Hallo,

    beim Versuch einen Vector zu sortieren:
    Code:
    void MyClass::sort(vector< map<string,float> > myVector)
    {   
        for(int i = myVector.size()-1; i>=1; i--)
        {
            for(int j=0; j<i; j++)
            {
                if(myVector[j]["value"]<myVector[j+1]["value"])
                {
                    myVector.swap(myVector[j+1],myVector[j]);
                }
            }
        } 
    }
    erhalte ich den Fehler:

    error: no matching function for call to `std::vector<std::map<std::string, float, std::less<std::string>, std::allocator<std:air<const std::string, float> > >, std::allocator<std::map<std::string, float, std::less<std::string>, std::allocator<std:air<const std::string, float> > > > >::s ...

    Was mache ich Falsch und wie kann ich den Vector sortieren?

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Um eine leichter verständliche Fehlermeldung zu bekommen, würde ich den Vergleich in etwa so auftrennen:
    Code:
    float value1 = myVector[j]["value"];
    float value2 = myVector[j+1]["value"];
    if (value1 < value2)
    Bzw, sieht dir mal std::sort() an, da kann man für eigene Datentypen auch eigene Vergleichsoperatoren verwenden.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.04.2006
    Beiträge
    13
    Oh sorry meine schuld, das hatte ich nicht gesagt. Der Fehler entsteht genau hier:

    Code:
    myVector.swap(myVector[j+1],myVector[j]);
    wie würde denn so ein Vergleichsoperator für std::sort() aussehen?

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    swap() tauscht den Inhalt des Objektes mit dem Parameter des Aufrufs, d.h. es ist eine Methode mit nur einem Parameter.

    Du könntest das hier versuchen
    Code:
    myVector[j+1].swap(myVector[j]);
    Ein Vergleichsfunktor ist im wesentlichen eine Klasse mit einem operator() der zwei Parameter hat
    Code:
    class MyCmparator
    {
    public:
        bool operator()(MyType& a, MyType& b)
        {
            if (/*kriterium*/)
                return true;
    
            return false;
        }
    };
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    12.04.2006
    Beiträge
    13

    Thumbs up

    Sehr gut so funktioniert es, vielen Dank!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •