设为首页 加入收藏

TOP

C++标准库容器总结(四)
2013-02-08 14:31:14 】 浏览:1378
Tags:标准 容器 总结

 

  1 关联容器定义

  存储对象集合的类型,支持通过键的高效访问.和顺序容器的本质差别在于:顺序容器通过元素在容器中的位置顺序存储和访问元素,而关联容器却是依靠键.map和set是两个基本的关联容器类型,map以键值对的形式组织存储元素,而set仅存储键.

  2 pair类型(在utility头文件中定义)

  a)pair类型的操作:

  pair<T1,T2> p1;创建一个空的pair对象,两个元素类型分别是T1和T2,值初始化;

  pair<T1,T2> p1(v1,v2);创建一个pair对象,具有两个元素v1和v2,类型分别是T1和T2;

  make_pair(v1,v2);以v1和v2作为值创建一个pair对象,元素类型分别是v1和v2的类型;

  p1.first;返回值为v1;

  p1.second;返回值为v2;

  p1 < p2;小于运算遵循字典次序;

  p1 == p2;如果两个pair对象的first成员和second成员依次相等,则两个pair对象相等;

  注:*pair类型属于类模板.

  3 关联容器和顺序容器的操作区别

  a)共有的操作:

  C<T> c;

  C<T> c(c2);

  C<T> c(b,e);

  关系操作符;

  c.begin();

  c.end();

  c.rbegin();

  c.rend();

  size_type

  iterator

  const_iterator

  reverse_iterator

  const_reverse_iterator

  difference_type 存储两个迭代器差值的有符号整型,可为负数

  value_type 对于map,是pair 类型

  reference value_type& 的同义词

  const_reference 等效于 const value_type&

  swap和赋值操作;

  clear和erase操作;

  容器大小的操作(resize除外);

  b)关联容器不提供的操作:

  front,push_front,pop_front,back,push_back,pop_back

  4 map类型

  map类型可理解为关联数组,关联的本质在于元素的值与某个特定的键相关联,而与元素的位置无关.

  a)map对象的定义:

  map<k,v> m;创建一个空的map对象m,其键和值的类型分别为k,v;

  map<k,v> m(m2);创建m2的副本m,m必须具有和m2相同的键类型和值类型;

  map<k,v> m(b,e);创建一个map对象m,存储迭代器[b,e)标记范围内的所有元素的副本,元素类型必须能转换为pair<const k,v>;

  注:*键类型必须能够定义<操作符.

  b)map定义的类型:

  map<k,v>::key_type;键的类型

  map<k,v>::mapped_type;元素的类型

  map<k,v>::value_type;pair<const map<k,v>::key_type,map<k,v>::mapped_type>

  注:*map迭代器解引用生成pair<const map<k,v>::key_type,map<k,v>::mapped_type>类型的对象,pair对象的值成员可以修改,但键成员不能修改;

  5 map容器的操作

  a)添加元素:

  m.insert(e);e为map的value_type类型的值.如果键e.first不存在,则添加一个值为e.second的值,如果存在,则m不变.该操作返回一个pair类型的对象,包含一个指向新添加元素的map迭代器,以及一个bool值,表示插入是否成功;

  m.insert(b,e);将迭代器b和e标示区间内的所有元素插入到m中,所插入的元素必须为m.value_typpe类型,返回void;

  m.insert(iter,e);如果m中不存在键e.first,则在m中以iter为起点搜索新元素的位置并插入,返回一个指向新添加元素的迭代器.

  m[“zhu”] = 1;在map中查找键为“zhu”的元素,如果没有,则插入一个新的键值对,键为“zhu”,值采用初始化,再将1赋给元素的值;

  b)查询元素:

  m.count(k);返回m中k键出现的次数,返回值只能是0或1;

  m.find(k);如果m中存在键为k的元素,则返回指向该元素的迭代器,否则,返回m.end();

  c)删除元素:

  m.erase(k);删除m中键为k的元素,返回值为所删除元素的个数,只能是0或1,类型为size_type;

  m.erase(p);删除m中迭代器p所指向的元素,p所指向的元素必须存在,返回void;

  m.erase(b,e);删除m中由迭代器[b,e)标示范围内的元素,[b,e)必须是有效范围,返回void.

  6 set类型

  set容器单单存储键的集合.

  a)set容器不支持的操作:

  set不支持下标操作;

  没有定义mapped_type,value_type对应的是key_type,即元素的类型;

  与map一样,set容器中的键也必须唯一,而且不能修改.

  注:*set容器支持map的大部分的操作.

  7 multimap和multiset

  a)元素的添加删除:

  insert 操作每次都会添加一个元素;

  erase 带有一个键参数的该操作将删除拥有该键的所有元素,返回删除的元素个数,而带有一个或一对迭代器参数,则只删除指定的元素,返回void.

  b)查找元素:

  m.count,m.find()

  m.lower_bound(k) 返回一个指向键不小于k的元素的迭代器;

  m.upper_bound(k) 返回一个指向键大于k的第一个元素的迭代器;

  m.equal_range(k) 返回一个pair对象,first成员等价于m.lower_bound(k);second成员等价于m.upper_bound(k);

      

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇将integer的bit位翻转 下一篇C/C++ 数组的初始化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目