Boost logo

Geometry :

Subject: Re: [geometry] rtree query and std::back_inserter
From: Adam Wulkiewicz (adam.wulkiewicz_at_[hidden])
Date: 2015-06-17 09:37:42


Hi Hussein,

Hussein Almashouq wrote:
> Hi to all I'm using the rtree* to load 1M > data points . Then I
> use the rtree query to different intersection query like
>
> found +=rtree.query(bgi::intersects(qbox), std::back_inserter(result));
>
> currently I'm interested in getting the count of results rather than
> inserting into the result vector
>
> I have to two question
>
> 1. is possible to skip std::back_inserter step and do a query that
> finds the count only.
> 2. How can improve the performance of the std::back_inserter methods
> as my results are N^2 where N > 1M usually . ( check this post
> https://pkisensee.wordpress.com/2011/06/02/efficient-stl-insertion-tip-of-the-month/)

To count the elements meeting the predicate or do something else for
each element without the creation of the result container you can use:

1. |boost::function_output_iterator|

|||// using C++11 lambda expression, in C++98 you can pass a function object||
size_t counter= 0;||
rtree.query(bgi::intersects(box),
             boost::make_function_output_iterator(
                 [&](Value const&) {
                     counter++;
                 }));|

2. query iterator

|size_t count = std::distance(tree.qbegin(intersects(box)), tree.qend())|;

Regards,
Adam



Geometry list run by mateusz at loskot.net