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