package Ġlib . collections Ċ Ċ class ĠMulti set < T >( val Ġentries : ĠMutable Map < T , Int > Ġ= ĠHashMap ()) Ġ{ Ġ// : ĠMutable Iterable < Mutable Map . Mutable Entry < T , Int >> Ġ{ ĊĊĠĠĠ Ġval Ġmembers : ĠMutable Set < T > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġentries . keys ĊĊĠĠĠ Ġval Ġoccup ation Numbers : ĠMutable Collection < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġentries . values ĊĊĊĠĠĠ Ġoperator Ġfun Ġset ( agent : ĠT , Ġoccup ation : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( occup ation Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries [ agent ] Ġ= Ġoccup ation ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . remove ( agent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( agent : ĠT ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . get OrDefault ( agent , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus Assign ( other : ĠMulti set < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġother . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ it . key ] Ġ+= Ġit . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( n : ĠInt ): ĠMulti set < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmultip lied Ġ= ĠMulti set < T >() ĊĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġ( member , Ġoccup ation ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmultip lied [ member ] Ġ= Ġoccup ation * n ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmultip lied ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġtimes Assign ( n : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor ( entry Ġin Ġentries ) Ġ{ Ġentry . setValue ( entry . value Ġ* Ġn ) Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠ Ġoverride Ġfun Ġiterator (): ĠMutable Iterator < Mutable Map . Mutable Entry < T , ĠInt >> Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnon Zero Entries . iterator () Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . toString () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun < T > Ġmulti set Of ( var arg Ġnon Zero Entries : ĠPair < T , Int >): ĠMulti set < T > Ġ= ĠMulti set ( hash Map Of (* non Zero Entries )) Ċ fun < T > Ġempty Multi set (): ĠMulti set < T > Ġ= ĠMulti set ()