Повысить R-дерево: невозможно удалить значения?

Во-первых, мой код:

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

Очевидно, что размер дерева увеличивается на десять, потому что десять вставок работали как шарм; но если удаления работали, в конце концов, дерево должно иметь тот же размер, что и раньше, а это не так.

Я придерживался синтаксиса об удалении значений из R-дерева, описанного Вот, и все компилируется правильно, но по какой-то странной причине просто не удаляет значение. Я могу предположить, что, поскольку он удаляет по значению, он может просто не найти значение для удаления, но как это может быть, так как это значение только что вставлено одна строка назад?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]