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.)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage