public bool MultiSetEquals(IEnumerable <T> other)
        {
            var multiset = new MultiSet <T>(other);

            foreach (T el in elements.Keys)
            {
                if (!multiset.Contains(el) || multiset[el] != this[el])
                {
                    return(false);
                }
            }
            return(true);
        }
        public bool IsSubsetOf(IEnumerable <T> other)
        {
            if (other is null)
            {
                throw new ArgumentNullException();
            }
            var multiset   = new MultiSet <T>(other);
            var enumerator = GetEnumerator();

            while (enumerator.MoveNext())
            {
                if (!multiset.Contains(enumerator.Current) || multiset[enumerator.Current] < this[enumerator.Current])
                {
                    return(false);
                }
            }
            return(true);
        }