什么是树木的特殊boost \ std容器?

时间:2011-08-31 12:58:44

标签: c++ boost tree std

所以我想将对string-path <-> my_file_object存储在这样的容器中,预期总对象大小为100 000。

  • 我需要通过绝对路径搜索来获取对象,例如我可以搜索a/b/c/file.h
  • 我需要能够列出folder中的所有项目名称,例如文件夹a/b/c/包含文件file.hfile.cpp,文件夹bin/和文件夹{{ 1}}
  • 我需要能够通过绝对路径添加新的bin2/并更新它们。
  • 我需要能够删除files

我对fiew事情感到疑惑 - 在STL / boost中是否有容器可用于此类事情?这个实现线程是否适合读取?

另外我想知道它是否比files内的所有对都快,所以我会通过code like this进行快速搜索,快速插入和删除以及文件夹文件列表?

2 个答案:

答案 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);