zoukankan      html  css  js  c++  java
  • 关联容器:map和multimap

    1. 关联容器 multimap

    1.1 multimap 模板类

    template<class Key, class T, class Pred = less<Key>,class A = allocator<T> >
    class multimap 
    {
    ....
    typedef pair<const Key, T> value_type;
    .......
    }; //Key 代表关键字的类型
    

    使用场景
    如果需要动态的添加数据,并且同时需要查询数据时,可以使用multimap

    1.2 模板参数:

    • Key:指定键的类型
    • T:指定值的类型
    • Pred: 指定键比大小的规则
    • A

    注意:

    • multimap中的元素由 <关键字,值>组成,每个元素是一个pair对象,关键字 就是first成员变量,其类型是Key
    • multimap 中允许多个元素的关键字相同。元素按照first成员变量从小到大 排列,缺省情况下用 less 定义关键字的“小于”关系
    • 在类内部,将存放的pair类 typedef:typedef pair<const Key, T> value_type;
    • 如果比大小的规则是缺省的,那么采用默认的规则比较。

    1.3 multimap 支持的操作

    1.3.1 插入

    // 定义一个map对象
    typedef map<int, string> STU;
     STU mapStudent;
    // 第一种 用insert函數插入pair
    mapStudent.insert(pair<int, string>(000, "student_zero"));
    // 第二种 用insert函数插入value_type数据
    mapStudent.insert(map<int, string>::value_type(001, "student_one"));
    //第三种  采用make_pair()
    mapStudent.insert(make_pair(001, "student_one"));
    

    1.3.2 查找元素

    当所查找的关键key出现时,它返回数据所在对象的位置,如果沒有,返回iter与end函数的值相同。

    // find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
    iter = mapStudent.find("123");
    if(iter != mapStudent.end())
    	cout<<"Find, the value is"<<iter->second<<endl;
    else
        cout<<"Do not Find"<<endl;
    

    1.3.3 刪除与清空元素

    //迭代器刪除
    iter = mapStudent.find("123");
    mapStudent.erase(iter);
    //用关键字刪除
    int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0
    //用迭代器范围刪除 : 把整个map清空
    mapStudent.erase(mapStudent.begin(), mapStudent.end());
    //清空元素
    mapStudent.clear()
    

    1.3.4 查询map大小

    在往map里面插入了数据,我们怎么知道当前已经插入了多少数据呢,可以用size函数,用法如下:

    int nSize = mapStudent.size();
    

    1.3.5 multimap 支持的其他操作

    insert()        //插入元素
    erase()         //删除一个元素
    clear(//删除所有元素
    count()         //返回指定元素出现的次数
    find()          //查找一个元素
    
    size()          //返回map中元素的个数
    begin()         //返回指向map头部的迭代器
    end()           //返回指向map末尾的迭代器
    rbegin()        //返回一个指向map尾部的逆向迭代器
    rend()          //返回一个指向map头部的逆向迭代器
    empty()         //如果map为空则返回true
    equal_range()   //返回特殊条目的迭代器对
    get_allocator() //返回map的配置器
    key_comp()      //返回比较元素key的函数
    lower_bound()   //返回键值>=给定元素的第一个位置
    upper_bound()   //返回键值>给定元素的第一个位置
    max_size()      //返回可以容纳的最大元素个数
    swap()          //交换两个map
    value_comp()    //返回比较元素value的函数
    

    1.3.6 map 举栗子

    // 简单使用 multimap
    #include <iostream>
    #include <map>
    using namespace std;
    int main()
    {
    	typedef multimap<int,double,less<int> > mmid;
    	mmid pairs;
    	cout << "1) " << pairs.count(15) << endl;
    	pairs.insert(mmid::value_type(15,2.7));//typedef pair<const Key, T> value_type;
    	pairs.insert(mmid::value_type(15,99.3));
    	cout <<2)<< pairs.count(15) << endl; //求关键字等于某值的元素个数
    	pairs.insert(mmid::value_type(30,111.11));
    	pairs.insert(mmid::value_type(10,22.22));
    	pairs.insert(mmid::value_type(25,33.333));
    	pairs.insert(mmid::value_type(20,9.3));
    	for( mmid::const_iterator i = pairs.begin();
    	i != pairs.end() ;i ++ )
    	cout << "(" << i->first << "," << i->second << ")" << ",";
    }
    

    2. map

    • map 与multimap 的不同之处在于map 不允许有重复的键。
    • 另外map 支持类似于数据的插入操作、或者查询操作(通过[] 成员函数)

    若pairs为map模版类的对象,pairs[key]
    返回对关键字等于key的元素的值(second成员变量)的引用。若没有关键
    字为key的元素,则会往pairs里插入一个关键字为key的元素,其值用无参
    构造函数初始化,并返回其值的引用。

  • 相关阅读:
    aspx有"记住我"的登录
    Aspx比较简单的登录
    内容显示分页数字分页 aspx
    Ashx登录
    Aspx 验证码_各种封装
    IsPostBack的使用
    Ashx增删改查_动软
    一般处理程序ashx
    dispatch_after
    pch文件的作用
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12764209.html
Copyright © 2011-2022 走看看