• 跟着<<C++Primer 学set容器>>


    今天看完了set,multimap,multiset关联容器,回顾一下:

    首先set容器与map不同的是set中value_type类型不是pair类型,而是key_type类型,没有了与map对应的mapped_type,

    与map不同的还有不支持下标操作。set容器由于只有键值,所以适合作为排除集使用。

    multimap 与 multiset

    顾名思义,是多值的map容器与set容器,也就是一个键值对应多个值。

    对于multimap与multiset的删除操作,由于一个键对应多个项目,所以带有一个键参数的erase函数会删除跟这个键关联的所有元素。但是带有迭代器或迭代器范围的erase函数只会删除迭代器所指示的元素。

      由于一个键不是唯一对应,所以查找一个元素变得比较复杂。

      一共提供了三种方式:

      (1).根据multimap与multiset的内存存储方式,一个键下面的所有元素都是按照顺序方式存放的。我们根据前面提供的find()与count()函数实现操作。

      

    string serthitem("gaoteng");

      mulitimap<string,string> athors;

      athors.insert(make_pair("gaoteng","C++ Primer"));

      athors.insert(make_pair("gaoteng","OpenGL"));

      multimap<string,string>::size_type count = athors.count(serthitem);

      multimap<string,string>::iterator iter = athors.find(serthitem);

      for(multimap<string,string>::size_type cnt = 0;cnt != count;++cnt,++iter)

        cout<<iter->second<<endl;

      (2).利用迭代器进行操作

      multimap与multiset提供三个关于迭代器的操作

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

      obj.upper_bound(k);//返回一个迭代器,指向键值大于k的元素

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

    下面重写上面的例子程序

    typedef multimap<string,string>::interator authors_it;
    authors_it beg= author.lower_bound(serthitem),
    end = author.upper_bound(serthitem);
    while(beg!=end)
    {
    cout<<beg->second<<endl;
    beg++;

    }

    (3)直接利用equal_range()函数

    由于equal_range()函数可以直接返回(2)方法中的两个迭代器,构成一个pair对象。

    下面具体例子说明:

    typedef multimap<string,string>::interator int_type;
    pari<int_type,int_type> pinter;
    pinter = author.equal_range(serthitem);
    while(pinter.first!=pinter.second)
    {
    cout<<pinter.first->second<<endl;
    pinter->first++;

    }

    通过上面的三种方式,实现对某一个元素的查找,明白了做一切东西都不是有唯一的路径,以后要多思考,多想问题。



  • 相关阅读:
    零基础读懂视频播放器控制原理: ffplay 播放器源代码分析
    JPEG压缩原理与DCT离散余弦变换——有实际的数据演示
    图像压缩编码和解码原理——阐述了DCT变换的实质
    C++与C语言容易忽视的几个差异
    VLC目录结构介绍
    轻量便携流媒体播放器框架设计-2
    轻量便携流媒体播放器框架设计-1
    rtmp和rtsp的区别和适用范围
    vlc源码分析(六) 调用OpenMAX硬解码H.265
    vlc源码分析(五) 流媒体的音视频同步
  • 原文地址:https://www.cnblogs.com/gaoteng/p/2384310.html
Copyright © 2020-2023  润新知