模板类地图插入VS非模板地图插入

时间:2018-11-15 18:57:55

标签: c++ c++11 templates std stdmap

我试图了解为什么std :: map.insert()函数的行为有所不同。

模板类std :: map插入函数的示例:

        #include <iostream>
        #include <map>
        #include <limits>

        template<class K, class V>
        class container
        {
        private:
        std::map<K,V> m_map;
        public:
        container(const V Val)
        {
        m_map.insert(m_map.begin(),std::make_pair(std::numeric_limits<K>::lowest(),Val));
        }
        const V operator[](const K key)
        {
        return (--m_map.lower_bound(key))->second;
        }
        };

        int main()
        {
        container<unsigned int, char> c('A');
        std::cout<<std::numeric_limits<unsigned int>::lowest()<<":"<<c[std::numeric_limits<unsigned int>::lowest()]<<"\n";
        std::cout<<"1:"<<c[1]<<"\n";
        std::cout<<"2:"<<c[2]<<"\n";
        std::cout<<"3:"<<c[3]<<"\n";
        std::cout<<"4:"<<c[4]<<"\n";
        std::cout<<"5:"<<c[5]<<"\n";
        std::cout<<std::numeric_limits<unsigned int>::max()<<":"<<c[std::numeric_limits<unsigned int>::max()]<<"\n";
        return 0;
        }

输出:

0:A
1:A
2:A
3:A
4:A
5:A
4294967295:A

非模板std :: map插入函数示例:

            #include <iostream>
            #include <map>
            #include <limits>
            int main()
            {
            std::map<unsigned int, char> m_map;
            m_map.insert(m_map.begin(),std::make_pair(std::numeric_limits<unsigned int>::min(),'A'));
            std::cout<<std::numeric_limits<unsigned int>::min()<<":"<<m_map[std::numeric_limits<unsigned int>::min()]<<"\n";
            std::cout<<"1:"<<m_map[1]<<"\n";
            std::cout<<"2:"<<m_map[2]<<"\n";
            std::cout<<"3:"<<m_map[3]<<"\n";
            std::cout<<"4:"<<m_map[4]<<"\n";
            std::cout<<"5:"<<m_map[5]<<"\n";
            std::cout<<std::numeric_limits<unsigned int>::max()<<":"<<m_map[std::numeric_limits<unsigned int>::max()]<<"\n";
            return 0;
            }

输出:

0:A
1:
2:
3:
4:
5:
4294967295:

第一个示例的输出显示,从0-> 4294967295的所有索引都被分配了字符'A'。在第二个示例中,仅给索引零(0)分配了字符'A'。

现在我的问题是,为什么即使我只进行了一次插入,第一个示例插入函数仍将相同的值分配给了范围内的所有键,但是第二个示例插入函数却恰好在我提示的某个位置插入了。

0 个答案:

没有答案