Consider the case where I have a user defined type with say a id()
member function which returns a unique std::string
.
I want a container of this objects, where the id()
uniquely identifies the elements, but I want to "use" the objects to do other things which may modify their members.
I am currently constructing the objects.by calling std::set::emplace
and capturing the returned iterator, bool pair.
But I am then not allowed to modify it's value as the iterator is const.
Is there a good way to do what I want? The only two I can think of are:
- Store
unique_ptr
s to the object in theset
, this way the pointer value is what differentiates it rather than the name and the object pointed to can be modified. - Store a
map
using theid()
as the Key, but this means I have duplicated the keys.
I am happy to use well adopted and modern libraries, such as boost, if they have the right container for my problem.