用map读取文本参数的Configprameter.h

C++ map基础知识: http://www.cnblogs.com/mattins/p/3531362.html这个最全,关于map排序

1,map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。(http://www.oschina.net/question/234345_48876)

2, map能做到快速遍历所有值,实现查找,删除等操作。

3,std:map<int, string> personnel;  定义了一个用int作为索引,并拥有相关联的指向string的指针.

可以使用typedef 定义某个map (eg: typedef std:map<int, string>  intStringMap )


4, map中插入类对象,若使用

class mapTest(){};

map<int, mapTest>  mapClass;

mapClass[2] = xxxx;

这时插入值的过程如下:在mapClass中找 key==2 的项, 若没有, 插入一个新的map对象,其 key = 2; value = NULL;完成后再将xxxx赋值给value。这样开销大。

可以使用insert插入当前map中没有的key和value, 如果当前map中已经存在,则只能用下标操作符插入,因为下标操作符可用来读取 key  和 value ,如果当前map没有需要查找的key, 则创建一个新key,value = NULL。。

mapClass.insert(map<int, mapTest> :: value_type(2, xxxx)); //插入value_type数据

或直接插入pair数据: mapClass.insert(pair<int, mapTest>(2, xxxx));  // 插入pair数据


可以用pair来检查是否插入成功:

Pair<map<int, mapTest>::iterator, bool> Insert_Pair;

Insert_Pair = mapClass.insert(map<int, mapTest>::value_type (1, “student_one”)); 插入成功返回true, 否则返回0


Int nSize = mapClass.size(); 可以用来看当前map中有多少数据。


其它示例:

map<string, int> mapTest; // 定义了一个空的map对象word_count;

          mapTest["Anna"] = 1; //给key为Anna的key赋值value为1;


5, 在map中查找获取某个元素用find,可以用来判断某个元素是否在map中存在,返回值类型是iterator:

第一种方法是用count,返回值只有 true or fauls, 无法定位;

int findCount;

mapTest nn;

if ( mapClass.count(2) )

      nn = mapClass[2] ;

else

     cout << " not exist key 2 " << endl;

第二种用find:

int findKey = 2;

map<int, mapTest>::iterator it= mapClass.find(findKey);

if ( it != mapClass.end){

cout << "Not find " << it->first << endl;

}

其中 it->first == key  it->seconde == value

通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator->first 和 iterator->second 分别代表关键字和存储的数据


6, 从map中删除元素:

移除某个map的元素用erase()

iterator erase(iterator it); //通过一个条目对象删除
iterator erase(iterator first, iterator last); //删除一个范围
size_type erase(const Key& key); //通过关键字删除

clear()就相当于 enumMap.erase(enumMap.begin(), enumMap.end());

empty()函数可以判断map是否被清空,返回true则是空map


7, 迭代输出map中所有元素

a:使用正向迭代器:


    for(iter = mapClass.begin(); iter != mapClass.end(); iter++)
    {
        Cout<<iter->first<<” ”<<iter->second<<end;
    }
b:使用反向迭代器:
    for(iter = mapClass.rbegin(); iter != mapClass.rend(); iter++)
    {
        Cout<<iter->first<<” ”<<iter->second<<end;
    }

map 的其它操作:       

     begin()            返回指向map头部的迭代器

     clear()        删除所有元素
     count()         返回指定元素出现的次数
     empty()         如果map为空则返回true
     end()           返回指向map末尾的迭代器
      equal_range()   返回特殊条目的迭代器对
      erase()         删除一个元素
     find()          查找一个元素
     get_allocator()  返回map的配置器
     insert()        插入元素
     key_comp()      返回比较元素key的函数
     lower_bound()   返回键值>=给定元素的第一个位置
      max_size()      返回可以容纳的最大元素个数
     rbegin()        返回一个指向map尾部的逆向迭代器
     rend()          返回一个指向map头部的逆向迭代器
     size()          返回map中元素的个数
     swap()           交换两个map
     upper_bound()    返回键值>给定元素的第一个位置
     value_comp()     返回比较元素value的函数


map 的继承:

map不宜继承, STL的析构函数不是虚的. 如果使用了继承, 也许现在没事, 但迟早会有事的.

如果用包含,自己在类中定义接口,转发给map, 那么map的方法就会全被隐藏, 若想在map方法保留的前提下扩展些自定义方法呢?




  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值