what's the reason for changing m_values to a map? it causes this rather fragile (and inefficient) values().at() call here I'd prefer to avoid...