Boost logo

Boost :

Subject: Re: [boost] [container] moving a pre-built vector into a flat_set
From: Sam Kellett (samkellett_at_[hidden])
Date: 2015-09-16 04:19:48


On 16 September 2015 at 01:24, Chris Glover <c.d.glover_at_[hidden]> wrote:

> <snip>
>
> >
> > what i would like to be able to do is move the vector straight into the
> > flat_set, something like:
> >
> > std::vector<T> data;
> >
> > flat_set data_set1(std::move(data)) // move vector in and sort it
> > // or:
> > std::sort(data.begin(), data.end()); // sort vector
> > flat_set data_set2(ordered_unique_t, std::move(data)) // and move it in
> >
> > is this doable (am i just being blind?) or is there plans/interest for
> > this?
> >
>
> </snip>
>
> You'll probably never be able to move the whole allocation, but you might
> be able to move each element via std::make_move_iterator
>

how come? i get that it's exposing the implementation, but the gains would
be so so massive. and the name flat_ basically confirms the use of a sorted
vector internally.

flat_set data_set2(ordered_unique_t, std::make_move_iterator(data.begin()),
> std::make_move_iterator(data.end())); // moves each element, but not the
> whole allocation, so still not free.
>
> I haven't tried this though.
>

that's definitely a compromising solution in some cases, but when you've
got a billion ints in a vector it doesn't help (or, like any standard
layout struct really)


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk