c++ 标准模板库 续文 set,multiset 和 map ,multimap

set是集合   集合么  顾名思义   只要是元素在集合里面   他就是自动就变成有序了和唯一了,也就是里面没有重复的元素

那么常用的成员函数都有什么呢?

1. begin()--返回指向第一个元素的迭代器

2. clear()--清除所有元素

3. count()--返回某个值元素的个数

4. empty()--如果集合为空,返回true

5. end()--返回指向最后一个元素的迭代器

6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器

7. erase()--删除集合中的元素

8. find()--返回一个指向被查找到元素的迭代器

9. get_allocator()--返回集合的分配器

10. insert()--在集合中插入元素

11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

12. key_comp()--返回一个用于元素间值比较的函数

13. max_size()--返回集合能容纳的元素的最大限值

14. rbegin()--返回指向集合中最后一个元素的反向迭代器

15. rend()--返回指向集合中第一个元素的反向迭代器

16. size()--集合中元素的数目

17. swap()--交换两个集合变量

18. upper_bound()--返回大于某个值元素的迭代器

19. value_comp()--返回一个用于比较元素间的值的函数

用法  和前面的那些相同    详情可以看我前两篇文章   multiset  和set  类似,但是是可以存在多个值

 

下面来介绍一下 map 

介绍map之前  需要先介绍一下  pair

pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同。如果一个函数有两个返回值的话,如果是相同类型,就可以用数组返回,如果是不同类型,就可以自己写个struct ,但为了方便就可以使用 c++自带的pair ,返回一个pair,其中带有两个值。除了返回值的应用,在一个对象有多个属性的时候 ,一般自己写一个struct ,如果就是两个属性的话,就可以用pair 进行操作。pair 可以省的自己写一个struct .如果有三个属性的话,其实也是可以用的pair 的 ,极端的写法 pair <int ,pair<int ,int > >写法极端。(后边的两个 > > 要有空格,否则就会是 >>位移运算符)

eg: pair<const int,string> item(213,"goupibushi")   这样就创建了一个对象item  里面包含两个信息  213  和  字符串"goupibushi"

那么为什么要介绍pair呢   不是介绍map么?

当然了  因为  map 是一种一对一的容器,也就是一个值对应一个值,像上面的213对应且唯一对应字符串"goupibushi"

map和set一样  他们都是有序且唯一的容器

map <int, string> m1 = {{ 3, "guangzhou" }, { 2, "shenzhen" }, { 1, "changsha" } };//实例化一个map容器,内含三组数据
 begin()          返回指向map头部的迭代器
    clear()         删除所有元素
    count()          返回指定元素出现的次数
    empty()          如果map为空则返回true
    end()            返回指向map末尾的下一个迭代器
    erase()          删除一个元素
    find()           查找一个元素
    insert()         插入元素
    max_size()       返回可以容纳的最大元素个数
    size()           返回map中元素的个数
    swap()           交换两个map
    rbegin()         反向迭代器,指向最后一个迭代器
    rend()           指向map头结点的前一个迭代器

multimap  就是一个有序的但不唯一的容器

但是在这里我要强调一下这个equal_range(const T&x)函数  这个函数返回两个迭代器,代表值为x的第一个迭代器和最后一个迭代器


#include <iostream>
#include <map>
int main ()
{
  std::multimap<char,int> my_multimap;
  my_multimap.insert(std::make_pair('a',10));
  my_multimap.insert(std::make_pair('a',20));
  my_multimap.insert(std::make_pair('a',30));
  my_multimap.insert(std::make_pair('a',40));
  my_multimap.insert(std::make_pair('b',10));
  my_multimap.insert(std::make_pair('c',10));
  my_multimap.insert(std::make_pair('c',20));
  std::pair<std::multimap<char,int>::iterator,std::multimap<char,int>::iterator> ret;
  ret=my_multimap.equal_range('a');
  for(std::multimap<char,int>::iterator it=ret.first;it !=ret.second;it++){
        std::cout << it->first << " => " << it->second << '\n';
  }
  return 0;
}

代码是转载的哈- -
这里最后一个for我看了好久  因为ret代表两个迭代器  虽然是两个迭代器  但是代表的确是 map中第一个等于和最后一个等于a的两个迭代器 ,可能里面等于 a的数量有好多  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值