所以我想将对string-path <-> my_file_object
存储在这样的容器中,预期总对象大小为100 000。
a/b/c/file.h
)folder
中的所有项目名称,例如文件夹a/b/c/
包含文件file.h
,file.cpp
,文件夹bin/
和文件夹{{ 1}} bin2/
并更新它们。files
。我对fiew事情感到疑惑 - 在STL / boost中是否有容器可用于此类事情?这个实现线程是否适合读取?
另外我想知道它是否比files
内的所有对都快,所以我会通过code like this进行快速搜索,快速插入和删除以及文件夹文件列表?
答案 0 :(得分:2)
如果您想要树状结构,请使用Boost Graph Library。
如果你想要一个文件系统抽象(访问有问题的文件系统,而不是你似乎在描述的内存中的某些快照),请使用Boost.Filesystem
答案 1 :(得分:2)
您有哪些要求排除std::map
?据我所知,它在这里运作良好:
typedef std::map<std::string,file_object_t> paths_t;
paths_t paths;
//I need to have search by absolute path
paths_t::iterator fileIterator = paths.find("a/b/c/file.h");
if( fileIterator != paths.end() ) {
...
}
//I need to be capable to list all item names in folder like folder a/b/c/
std::string folder = "a/b/c/";
paths_t::iterator folderBegin = paths.upper_bound(folder );
paths_t::iterator folderEnd = paths.upper_bound(folder+MAX_CHAR);
std::for_each(folderBegin,folderEnd,...);
//I need to be capable to add new files by absolute path
if( !paths.insert(paths_t::value_type("a/b/c/file.h",file)).second ) {
//add file failed
}
//and update them.
paths["a/b/c/file.h"].some_method_that_updates_file();
//I need to be capable to delete files
paths.erase(fileIterator);