On Mon, Oct 24, 2016 at 9:27 AM, Ram
I am not sure I understood a few things you said like, [...] Does this, [...] mean I would need to iterate using the unique key and find the object I want to update and change this non-unique key to the new one?
No. Perhaps the pseudo C++11 code below will help? Lets assume your unique index is the first index (index = 0), and the non-unique one is second index (index = 1). using bmi_t = ...; bmi_t& bmi = /*get the BMI container*/; auto& uniq_idx = bmi.get<0>(); auto unique_idx_iter = uniq_idx.find(uniq_key); if (unique_idx_iter == uniq_idx.end()) return; auto nonunique_iter = bmi.project<1>(unique_idx_iter); auto& nonuniq_idx = bmi.get<0>(); bool ok = nonuniq_idx.modify(nonunique_iter, [&new_value](bmi_t::value_type& element) { element.setNonUniqueIdString(new_value); }); if the modification could be veto'd by any of your indexes, you'd probably use the overload with a Rollback functor. For actual code, I'm sure there's an example in your Boost install. --DD PS: If you don't have a unique index and unique key for your element, then indeed you need to iterate on your container (or non-unique index), and figure out in an ad-hoc way which exact element you want to modify. (and need to project<1>() only if not iterating on the index you want to modify).