关联容器

顺序容器通过元素在容器中的位置顺序存储和访问元素,关联容器通过键(key)来存储和读取元素。二者的本质区别在于关联容器是通过键来高效查找和读取元素。
关联容器主要有四种:map,set,multimap,multiset(以键是否可以重复来加以区分)
pair
pari是关联容器中用到的重要类型。

    pair<T1,T2> p1;
    pair<T1,T2> p1(v1,v2);

make_pair(v1,v2) 生成新的pair对象,T1和T2类型有v1和v2自动确定。

p1<p2  
  p1.first<p2.first 或者 !(p2.first<p1.first)&&p1.second<p2.second

p1==p2
p1和p2的first和second分别相等。
构造函数
关联容器的构造函数与顺序容器的构造函数操作相同。
c<T> c1;
c<T> c1(c2);
c<T> c(b,e);

键类型的约束
关联容器的键不仅应该是一个类型,而且还需要有一个相关的比较函数(<)。严格弱排序
类型
key_type 键类型
map_type map容器特有的值类型
value_type
对于map容器 pair<const key_type,mapped_type>
对于set容器 key_type

    map(key~value)
添加元素:
    1.下标访问. 如果容器中没有该元素,则自动添加。新的键是const类型。
    下标操作返回的是mapped_value
    迭代器解引用返回的是pair<const key_value,mapped_value>
    2.insert()函数
    m.insert(e)
    e是value_type,如果e.first已经在map当中,则不执行插入操作。该函数的返回类型是pair<map迭代器,bool类型(如果执行了插入操作则为true)>
    eg.m.insert(map<string,int>::value_type(“Anna”,1))
    m.insert(beg,end)
删除元素:
    erase(k) k是key_value,返回size_type,删除的数量
    erase(p) p是迭代器,void
    erase(b,e) 一对迭代器表示删除范围
查找元素:
    find(k) 返回查找到的元素的迭代器,如果没有找到元素,返回最后一个元素后面一位
    count(k) 返回查找的元素的数目,在map中只有01两种结果
    这里不能用下标操作来查找元素,因为下标操作会自动添加元素。因此在这里使用下标操作时非常危险的。
set(key)
添加元素:
    insert(e); e是key_value 返回pair类型,同上
    insert(b,e);一对迭代器的元素
    set不支持下标操作。
查找元素:
    find();
      count();
     set中key是const类型,iterator set_it = s.find(k); *set_it是const类型
multimap & multiset
    multimap不支持下标操作,因为存在一个键对应多个实例。
    添加:每一个Insert都会进行插入操作
    删除:erase()同上
    查找:返回第一个拥有该键的实例。
    lower_bound(k):返回第一个不小于k键的元素的迭代器
    upper_bound(k):返回第一个大于k键的元素的迭代器
    如果不存在k键,则两个函数都指向最后元素的最后一位。
    equal_range(k):返回pair<lower_bound(k),upper_bound(k)>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值