public virtual double Remove(K1 o1, K2 o2)
        {
            ClassicCounter <K2> c = GetCounter(o1);
            double oldCount       = GetCount(o1, o2);

            total -= oldCount;
            c.Remove(o2);
            if (c.Size() == 0)
            {
                Sharpen.Collections.Remove(map, o1);
            }
            return(oldCount);
        }
 public virtual void Clean()
 {
     foreach (K1 key1 in Generics.NewHashSet(map.Keys))
     {
         ClassicCounter <K2> c = map[key1];
         foreach (K2 key2 in Generics.NewHashSet(c.KeySet()))
         {
             if (SloppyMath.IsCloseTo(0.0, c.GetCount(key2)))
             {
                 c.Remove(key2);
             }
         }
         if (c.KeySet().IsEmpty())
         {
             Sharpen.Collections.Remove(map, key1);
         }
     }
 }