Boost :: filesystem, std :: sort: dificuldade em reter informações em passagens de classificação
Estou tentando usarstd::sort
em um tipo de dados que contém informações lidas de umboost::filesystem::dictionary_iterator
. Parece que, como o algoritmo de classificação fezn
comparações,n
sendo o número de arquivos no diretório, essa informação se perde e eu acabo sendo segmentado. Valgrind diz que estou usando valores não inicializados e fazendo leituras inválidas.
Como posso mudar meuFile
tipo de dados ou algoritmos para que as informações sejam mantidas entre as passagens?
#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;
}
(Este não é o meu programa real, mas exibe o mesmo comportamento.)