Please help me to choose a container

Hi All, I have a number of named objects of type B whose name can be accessed by B::Name(). B is polymorphic. D1, D2 and so on are derived from B. I want to put them in a set or map-like container ordered by their names. They are referenced by other objects, such as of type C. If the objects in the container are changed by its type (from type D1 to D2) or value, their users can know it automatically, i.e. those information is shared among owners and users. To erase an object in the container, first we need to ensure it is not be used by other objects. Please help me on choose a proper container with smart pointers. I am struggling with it by trying multi-index-container, pointer container, standard container, and cannot find a good way. Thanks a lot ! ! Best regards, Jayden

2011/12/20 Jayden Shui
Hi All,
Hi Jayden,
I have a number of named objects of type B whose name can be accessed by B::Name(). B is polymorphic. D1, D2 and so on are derived from B. I want to put them in a set or map-like container ordered by their names. They are referenced by other objects, such as of type C. If the objects in the container are changed by its type (from type D1 to D2)
How can an object change it's type? Don't you need to erase an object and create a new one to achieve that? or value, their users can know it automatically, i.e. those information is
shared among owners and users. To erase an object in the container, first we need to ensure it is not be used by other objects.
Please help me on choose a proper container with smart pointers. I am struggling with it by trying multi-index-container, pointer container, standard container, and cannot find a good way.
My first guess would be write your own container adaptor, that uses std::set/map< shared_ptr<B>, your_compare >... Regards Kris

On Tue, Dec 20, 2011 at 6:40 PM, Krzysztof Czainski <1czajnik@gmail.com>wrote:
2011/12/20 Jayden Shui
Hi All,
Hi Jayden,
I have a number of named objects of type B whose name can be accessed by B::Name(). B is polymorphic. D1, D2 and so on are derived from B. I want to put them in a set or map-like container ordered by their names. They are referenced by other objects, such as of type C. If the objects in the container are changed by its type (from type D1 to D2)
How can an object change it's type? Don't you need to erase an object and create a new one to achieve that?
Yes it is.
or value, their users can know it automatically, i.e. those information
is shared among owners and users. To erase an object in the container, first we need to ensure it is not be used by other objects.
Please help me on choose a proper container with smart pointers. I am struggling with it by trying multi-index-container, pointer container, standard container, and cannot find a good way.
My first guess would be write your own container adaptor, that uses std::set/map< shared_ptr<B>, your_compare >...
Do I need std::set/map< shared_ptr
Regards Kris

On 20 December 2011 17:53, Jayden Shui
Do I need std::set/map< shared_ptr
, your_compare > to do it, since it is the B* shared? Thanks a lot.
Yes. In addition, you'll have to erase then insert whenever you change the object which scoped_ptr<B> holds, unless you have some other way of guaranteeing that B::Name() won't change when the object changes. Multiindex might be easier to use in this respect. -- Nevin ":-)" Liber mailto:nevin@eviloverlord.com (847) 691-1404

On Tue, Dec 20, 2011 at 7:07 PM, Nevin Liber
On 20 December 2011 17:53, Jayden Shui
wrote: Do I need std::set/map< shared_ptr
, your_compare > to do it, since it is the B* shared? Thanks a lot. Yes. In addition, you'll have to erase then insert whenever you change the object which scoped_ptr<B> holds, unless you have some other way of guaranteeing that B::Name() won't change when the object changes. Multiindex might be easier to use in this respect.
Thanks a lot! Elements in container are on heap. I just feel the
somehow_container_ptr

On 21 December 2011 00:13, Jayden Shui
Elements in container are on heap. I just feel the
somehow_container_ptr
> so unfriendly to developers.
Use typedef Best regards -- Mateusz Loskot, http://mateusz.loskot.net
participants (4)
-
Jayden Shui
-
Krzysztof Czainski
-
Mateusz Łoskot
-
Nevin Liber