Boost :: filesystem, std :: sort: Probleme beim Speichern von Informationen zu Sortierdurchläufen
Ich versuche es zu benutzenstd::sort
auf einem Datentyp, der Informationen enthält, die aus a gelesen wurdenboost::filesystem::dictionary_iterator
. Es sieht so aus, als ob der Sortieralgorithmus es getan hatn
Vergleiche,n
Da es sich um die Anzahl der Dateien im Verzeichnis handelt, gehen diese Informationen verloren und am Ende tritt ein Fehler auf. Valgrind sagt, ich verwende nicht initialisierte Werte und führe ungültige Lesevorgänge durch.
Wie kann ich meine ändern?File
Datentyp oder Algorithmen, damit die Informationen zwischen den Durchläufen aufbewahrt werden?
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
struct File {
fs::path path;
fs::file_status status;
};
bool comp(const File& a, const File& b) {
static size_t count = 0;
std::cout << "Compare function called " << ++count << " times" << std::endl;
std::string a_filename = a.path.filename().native();
std::string b_filename = b.path.filename().native();
return a_filename.compare(b_filename);
}
int main() {
std::vector<File> vec;
// Read directory
fs::directory_iterator it("/etc"), end;
for (; it != end; it++) {
File f = *(new File);
f.path = it->path();
f.status = it->status();
vec.push_back(f);
}
std::sort(vec.begin(), vec.end(), comp);
// Clean up
for (std::vector<File>::iterator it = vec.begin(); it != vec.end(); it++)
delete &(*it);
return 0;
}
(Dies ist nicht mein eigentliches Programm, zeigt aber dasselbe Verhalten.)