The other answer is correct in that QMap::operator[] returns a mutable reference (T&) while QMap::value() returns an immutable copy (const T), which is the first thing to address.
For what they left unaddressed, the "how do I update a specific struct value" part, the answer is that you want a QMultiMap for that. Whereas QMap::find() only takes a key, QMultiMap::find() takes a key and a value. Using that, you can find the precise instance of the struct you want to update.