std.container.RedBlackTree versus C++ std::set

Namespace rswhite4 at googlemail.com
Thu Feb 14 11:56:31 PST 2013


On Thursday, 14 February 2013 at 19:31:36 UTC, Steven 
Schveighoffer wrote:
> On Thu, 14 Feb 2013 13:45:30 -0500, Rob T <alanb at ucora.com> 
> wrote:
>
>> When I look at the std.container source code, it seems that 
>> the payload element is passed by value multiple times 
>> unnecessarily, so to minimize copy construction you'll have to 
>> implement element as a class and implement a dup function for 
>> it.
>>
>> I expect performance will increase substantially even with the 
>> extra heap allocations.
>>
>> Alternatively, you can implement your own version of 
>> RedBlackTree with pass by ref optimizations for insertion of 
>> struct elements.
>
> If it was pass by ref, then rbt.insert(5) would not work.  And 
> in fact, I wouldn't want things passed by ref if the element is 
> int.  I have to admit, I did not consider expensive postblits 
> when I designed it.  Almost all my testing is with integer 
> types.
>
> Unfortunately, D is in this state where taking a ref parameter 
> means strictly lvalue.  So passing rvalues will not work.  D 
> does not have the notion that C++ has where const type& can 
> accept both rvalue and lvalue.  We desperately need something 
> similar.
>
> -Steve

There are discussions for such thing for almost a year - but 
nothing has changed so far.


More information about the Digitalmars-d-learn mailing list