合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
##没有躲过的坑--map的初始化(插入数据) 最近工作中需要使用map,进行查询。 首先简单介绍一点map,也许是教科书里讲授最少的STL知识吧。但是在实际工作中map挺重要的,用于查找很方便快捷,尤其是以键和值的形式存在的! **1、头文件** ~~~ #include<map> ~~~ **2、map的功能** 自动建立Key - value的对应。key 和 value可以是任意你需要的类型。  根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。  快速插入Key - Value 记录。  快速删除记录  根据Key 修改value记录。  遍历所有记录。 **3、map的构造函数**  map共提供了6个构造函数,我们通常用如下方法构造一个map: ~~~ Map<int, string> mapStudent; ~~~ **4、插入数据**  (1)my_Map[“a”]=1; 改变map中的条目非常简单,因为map类已经对[]操作符进行了重载 enumMap[1] = “One”; enumMap[2] = “Two”; ….. 这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为”Two”; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销: ~~~ enumMap.insert(map<int, CString> :: value_type(2, "Two")) my_Map.insert(map<string,int>::value_type("b",2)); my_Map.insert(pair<string,int>("c",3)); my_Map.insert(make_pair<string,int>("d",4)); ~~~ 起初我就是用上面愚蠢的方法进行了插入数据,但是我的数据量挺大的,需要近一千对,总不能一条一条的这样写吧。 于是想起了之前写的博客《[c++11特性之initializer_list](http://blog.csdn.net/wangshubo1989/article/details/49622871 "初始化列表")》,是不是可以使用初始化列表对map进行赋值呢,答案是肯定的。 ~~~ std::map<int, string> int_to_string = { {1, "what"}, {2, "a"}, {3, "fuck"}, {4, "day"}, .... ~~~