015
12.09.2004, 09:09 Uhr
(un)wissender
Niveauwart
|
Hier noch einmal die Pointerversion, die für dich ev. eher in Frage kommt.
C++: |
#include <functional> #include <algorithm> #include <iterator> #include <iostream> #include <vector> #include <string>
class Medium { public: Medium(const std::string& interpret) : interpret_(interpret) {} const std::string getInterpret() const //const ist wichtig! { return interpret_; } friend std::ostream & operator<<(std::ostream & out, const Medium * medium) { return out << medium->interpret_; } //Als innere Klasse von Medium -> Kapselung struct CompareInterpret : public std::binary_function<Medium *, Medium *, bool> { bool operator()(const Medium* a, const Medium* b) const { return a->getInterpret() < b->getInterpret(); //getInterpret() muss const sein! } };
private: std::string interpret_; };
//So wird es aufgerufen int main() { std::vector<Medium *> mainVec; mainVec.push_back(new Medium("b")); mainVec.push_back(new Medium("a")); mainVec.push_back(new Medium("c")); std::cout << "Vor dem Sortieren: "; std::copy(mainVec.begin(), mainVec.end(), std::ostream_iterator<Medium *>(std::cout, " ")); std::cout << std::endl; std::sort(mainVec.begin(), mainVec.end(), Medium::CompareInterpret()); std::cout << "Nach dem Sortieren: "; std::copy(mainVec.begin(), mainVec.end(), std::ostream_iterator<Medium *>(std::cout, " ")); std::cout << std::endl; for(std::vector<Medium *>::iterator i = mainVec.begin(); i != mainVec.end(); ++i) { delete *i; } return 0; }
|
Damit solltest du eigentlich alles haben, um dein Sortierproblem lösen zu können.
Bearbeitung: |
Das mit der lange Fehlermeldung hat vermutlich (kenne deinen Code nicht) den Grund, dass du die const-Korrektheit verletzt hast. In einer als const deklarierten Funktion können nur andere auch als const deklarierte Funktionen aufgerufen werden, ich vermute mal, dass getInterpret bei dir nicht const war, es aber hätte sein sollen. Alternativ (auch Windalfs Nemesis genannt) kannst du auch in CompareInterpret::operator() alle const weglassen, aber das wäre sehr schlechter Stil.
|
-- Wer früher stirbt ist länger tot. Dieser Post wurde am 12.09.2004 um 09:17 Uhr von (un)wissender editiert. |