suncode

  博客园 :: 首页 :: 新随笔 :: :: :: 管理 ::
1 key/value 必需具备assignable 可赋值 copyable 可复制 
   key被视为常数,元素实质型别pair<const key, T>, 不可调用变动性算法,如remove(),remove()实质上是以一个参数覆盖被移除的元素
   map移除操作只能使用map提供的成员函数
2 对排序准则 key 必需是comparable 可比较
3 构造/析构函数
   map c;                            空map
   map c(op);                      (op排序准则)
   map c1(c2);                     c2副本
   map c(begin, end)
   map c(begin, end, op) 
   c.~map();
4 排序准则定义
   (1) template 参数定义 std::map<float, std::string, std::greater<float> > coll;
   (2) 构造函数参数定义
5 非变动性操作
  key value 排序准则 必需具有相同的型别
  c.size();
  c.empty();
  c.max_size();
  c1==c2; c1!=c2; c1<c2; c1>c2; c1<=c2; c1>=c2;
 
 count(key)
 find(key)  不能find()搜索某特定value的元素,可改用通用算法find_if() 或者利用find(key)写显示循环
 low_bound(key)
 upper_bound(key)
 equal_bound(key) 返回键值==key 的元素区间
 
 c1=c2;  //复制操作型别必需相同,排序准则可以不同 准则本身被赋值或交换
 c1.swap(c2);
 swap(c1,c2);
 
 迭代器相关操作函数
 c.begin()   c.end(); c.rbegin(); c.rend();
 
 安插移除
 c.insert(elem)              不论是否成功返回插入元素位置
 c.insert(pos, elem)       指出安插操作搜寻起点
 c.insert(begin, end)      将[begin, end]安插入c,无返回值
 c.erase(elem)              移除value==elem的所有元素,返回移除个数
 c.erase(pos)               无返回值
 c.erase(begin, end)     无返回值
 c.clear();
 安插 记住key视为常数,必需提供正确型别或提供隐式或显式转换,三种方法将value传入map:
 (1) value_type:  coll.insert(std::map<std::string, float>::value_type("otto", 22.3));
 (2) pair<>:       std::map<std::string, float> coll;
                        coll.insert(std::pair<std::string, float>("otto", 22.3));
                        coll.insert(std::pair<const std::string, floar>("otto", 22.3));
 (3) make_pair:  std::map<std::string, float> coll;
                        coll.insert(std::make_pair("otto", 22.3));
 
 正确的移除操作,注意:对pos所指元素实施erase() 会使pos不再成为一个有效的coll迭代器;
 typedef std::map<std::string, float>  string_float_map;
 string_float_map coll;
 string_float_map::iterator pos;
 
 for(pos=coll.begin(); pos!=coll.end; )
{
   if(pos->second==value)
  {
      coll.erase(pos++);
  }
  else
  {
      ++pos;
  }
}
 
6 map视为关联数组 associated array
   map[key]  返回一个reference,如果元素不存在,就安插该元素
posted on 2011-02-22 21:45  suncode  阅读(1222)  评论(0)    收藏  举报