public virtual ThreeDimensionalMap <K2, K3, K4, V> GetThreeDimensionalMap(K1 key1)
        {
            ThreeDimensionalMap <K2, K3, K4, V> m = map[key1];

            if (m == null)
            {
                m         = new ThreeDimensionalMap <K2, K3, K4, V>();
                map[key1] = m;
            }
            return(m);
        }
        public virtual ICollection <K3> ThirdKeySet()
        {
            ICollection <K3> keys = Generics.NewHashSet();

            foreach (K1 k1 in map.Keys)
            {
                ThreeDimensionalMap <K2, K3, K4, V> m3 = map[k1];
                foreach (K2 k2 in m3.FirstKeySet())
                {
                    Sharpen.Collections.AddAll(keys, m3.Get(k2).FirstKeySet());
                }
            }
            return(keys);
        }
        public virtual ICollection <K4> FourthKeySet()
        {
            ICollection <K4> keys = Generics.NewHashSet();

            foreach (K1 k1 in map.Keys)
            {
                ThreeDimensionalMap <K2, K3, K4, V> m3 = map[k1];
                foreach (K2 k2 in m3.FirstKeySet())
                {
                    TwoDimensionalMap <K3, K4, V> m2 = m3.Get(k2);
                    foreach (K3 k3 in m2.FirstKeySet())
                    {
                        Sharpen.Collections.AddAll(keys, m2.Get(k3).Keys);
                    }
                }
            }
            return(keys);
        }
        public virtual V Put(K1 key1, K2 key2, K3 key3, K4 key4, V value)
        {
            ThreeDimensionalMap <K2, K3, K4, V> m = GetThreeDimensionalMap(key1);

            return(m.Put(key2, key3, key4, value));
        }