Because a multi-set does not need the storage of single-element objects.
You're considering storing anything in a multi-set, such as a string.
But it is not its intended use.
You may use whatever struct you want and compare it to a single element in the struct.
As an example:
struct PhoneBookEntry
{
std::string name;
std::string phoneNumber;
}
There's no reason to have a single entry per name in a phone book in this unsophisticated "phone book" entry.
There may be a lot.
So you create a PhoneBookEntry multiset and make the comparator by name.
You may have many phone numbers with the same name this way.
You could assume that a map is more appropriate for this.
However, this is only one example.
A multiset is used when you don't require a key/value pair but need the search features of a set with several entries per key.