Seite 1 von 1
FileStream vector sortieren( Dedupe )
Verfasst: Fr Apr 01, 2011 11:41 pm
von Bebu
Ich habe mal wieder ein kleines Problem, das sich bei der Überarbeitung vom FileSearch Modul ergeben hat. Folgendes Konstrukt:
Code: Alles auswählen
typedef boost::filesystem::path FilePath;
class FileInfo
{
public:
...
Dedupe::FilePath GetPath() const
{
return Path;
}
...
private:
Dedupe::FilePath Path;
};
typedef std::vector<FileInfo> FileStream;
Ich suche nach einer Möglichkeit, den FileStream Vector zu sortieren, allerdings nach dem Pfad, der durch Getpath() erhalten wird. Ich habe es bereits mit sort() versucht, bin aber gnadenlos gescheitert. Hat jemand eine Idee?
Re: FileStream vector sortieren( Dedupe )
Verfasst: Sa Apr 02, 2011 12:03 am
von cloidnerux
Du schreibst dir die String-Analyse Funktion selber.
Du suchst nach "/" oder "\", bzw C:, D:, E:, etc.
C ist über D, das kann man über einfache Char vergleiche machen.
Im Endeffekt hast du dann sowas wie hier:
http://www.pr0gg3n.org/doku.php?id=algo:start
Re: FileStream vector sortieren( Dedupe )
Verfasst: Mi Apr 06, 2011 12:36 pm
von Bebu
Das ist mir zu aufwändig. Aber ich habe mittlerweile mit Freund Google eine Lösung gefunden:
Code: Alles auswählen
public:
bool operator < (const FileInfo & rhs ) const { return Path < rhs.Path; }
innerhalb von FileInfo hat mein Problem auch sehr gut gelöst.
Re: FileStream vector sortieren( Dedupe )
Verfasst: Mi Apr 06, 2011 12:48 pm
von Xin
Was ja die von cloidnerux vorgeschlagene Methode ist, nur dass der Vergleich über std::string schon implementiert ist.

Re: FileStream vector sortieren( Dedupe )
Verfasst: Mi Apr 06, 2011 6:45 pm
von Bebu
Das mag sein. Ich muss ehrlich zugeben, dass ich mich nicht schlau gemacht habe, mit welcher Sortiermethode std::sort() genau arbeitet. Und es ist durchaus möglich, das eine eigene Implementierung auch schnell wäre. ABER ich will momentan den Code so kompakt wie möglich halten und ich bin der Meinung das man Feintuning betreiben sollte, wenn das wesentliche funktioniert, statt sich an den Details aufzuhalten und dabei das Ziel aus den Augen zu verlieren. Rom ist auch nicht an einem Tag erbaut worden
