提升R树:无法删除值?

时间:2015-05-21 10:26:46

标签: c++ r-tree boost-geometry

首先,我的代码:

// Reads the index
bi::managed_mapped_file file(bi::open_or_create, indexFile.c_str(), bf::file_size(indexFile.c_str()));
allocator_t alloc(file.get_segment_manager());
rtree_t * rtree_ptr = file.find_or_construct<rtree_t>("rtree")(params_t(), indexable_t(), equal_to_t(), alloc);
std::cout << "The index contains " << rtree_ptr->size() <<  " entries." << std::endl;

std::ifstream inf(transFile.c_str());
std::string line;

while(getline(inf,line))
{
    transition t = transition(line);
    point A;
    A.set<0>(t.getQ1mz()-1);            
    A.set<1>(t.getQ3mz()-1);            
    A.set<2>(0.3);          
    A.set<3>(0.2);

    value_t v = std::make_pair(A,t);        
    rtree_ptr->insert(v);       

    rtree_ptr->remove(v);
}

std::cout << "Finished. The index now contains " << rtree_ptr->size() <<  " entries." << std::endl;

它从内存映射文件中读取R树。然后,它读取一个输入文件transFile,从其内容中制作十个所谓的“过渡”对象,并将它们插入树中。紧接着,它会删除它们。这是一个无用的案例,但它很好地说明了删除步骤不起作用的问题。我得到的输出是:

The index contains 339569462 entries.
Finished. The index now contains 339569472 entries.

很明显,树的大小增加了十倍,因为十个插入就像一个魅力;但如果删除工作正常,那么树的大小应该与以前相同,但事实并非如此。

我遵循了关于从描述here的R树中删除值的语法,并且所有编译都正确,但由于某些奇怪的原因,它只是不删除该值。我的猜测可能是因为它按值删除,它可能只是找不到要删除的值,但它怎么可能因为该值是刚刚插入一行的值?

0 个答案:

没有答案