Hi Joaquin,

 Thanks for the quick answer.

I don't think you can avoid duplication of keys --if the
keys are really expensive to duplicate, you might consider
holding shared_ptrs to them, but this is AFAICS the furthest
you can get.
  
I see.
My question is actually more general, than copy-ctor issues.
Often you might like to insert existing objects into a container, ones that do not have the indexing keys in them.
But I guess, this is what makes multi_index more like std::set than std::map.

Take into acount that a multi_index_container with two keys
is not a map of maps. These are different beasts, serving different
purposes,

* a map of maps applies two concatenated lookups to get
to a "terminal" object,
* a multi-index container with two indices applies either one
of two poosible lookups to get to the object,

so you might want to ask yourself whether it makes sense
to try to replace your current code with Boost.MultiIndex.
What are the advantages / use cases you envision?

  
Well, I guess you're right.
Initially I thought I could use it to "cut" the elements according to the various indices, like a lightweight DB.

BTW, is there some C++ other data structure library (in boost or out), that might fit the bill?
I really don't need a full fledged DB, just "map-of-maps..." with readable semantics.

Thanks,
Adi