On 16 September 2015 at 01:24, Chris Glover
<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)