美文网首页
Map in C++

Map in C++

作者: 24_5901 | 来源:发表于2019-11-29 23:17 被阅读0次

    map简介

    是STL的一个关联容器,它提供一对一的hash。

    -    第一个可以称为关键字(key),每个关键字只能在map中出现一次;

    -    第二个可能称为该关键字的值(value);

    map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个班级中,每个学生的学号跟他的姓名就存在著一对一映射的关系。

    使用map

    #include <map>  //注意,STL头文件没有扩展名.h

    map对象是模板类,需要关键字和存储对象两个模板参数:

    std:map<int, string> personnel;

    这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

    插入元素

    map<int, string> mapStudent;

    mapStudent.insert(pair<int, string>(000, "student_zero"));

    //方法1:使用insert函数插入pair

    mapStudent[123] = "student_first";

    //方法2:用"array"方式插入

    用insert函数插入数据,在数据的 插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是不能在插入数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对 应的值,用程序说明如下:

    mapStudent.insert(map<int, string>::value_type (001, "student_two"));

    mapStudent.insert(map<int, string>::value_type (001, "student_two"));

    上面这两条语句执行后,map中001这个关键字对应的值是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功,程序如下

    // 构造定义,返回一个pair对象

    pair<iterator,bool> insert (const value_type& val);

    pair<map<int, string>::iterator, bool> Insert_Pair;

    Insert_Pair = mapStudent.insert(map<int, string>::value_type (001, "student_one")); if(!Insert_Pair.second)

        cout << ""Error insert new element" << endl ;

    我们通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否则为false。

    查找元素

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

    map<string>::iterator iter;

    iter = mapStudent.find("123");

    if(iter != mapStudent.end())

        cout<<"Find, the value is"<<iter->second<<endl;

    else

        cout<<"Do not Find"<<endl;

    刪除与清空元素

    //迭代器刪除

    iter = mapStudent.find("123");

    mapStudent.erase(iter);

    //用关键字刪除

    int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0

    //用迭代器范围刪除 :把整个map清空

    mapStudent.erase(mapStudent.begin(), mapStudent.end());

    //等同于mapStudent.clear()

    map的遍历

    #include <iostream>

    #include <map>

    using namespace std;

    int main() {

        map<int, int> _map; _map[0] = 1;

        _map[1] = 2;

        _map[10] = 10;

        map<int, int>::iterator iter;

        iter = _map.begin();

        while(iter != _map.end()) {

            cout << iter->first << " : " << iter->second << endl; iter++;

        } // 也可以使用for循环遍历

        /* for(iter = _map.begin(); iter != _map.end(); iter++) {

            cout << iter->first << " : " << iter->second << endl;

        } */

    return 0;

     map的基本操作函数

    begin()         返回指向map头部的迭代器

    clear()        删除所有元素

    count()         返回指定元素出现的次数

    empty()         如果map为空则返回true

    end()           返回指向map末尾的迭代器

    equal_range()   返回特殊条目的迭代器对

    erase()         删除一个元素

    find()          查找一个元素

    get_allocator() 返回map的配置器

    insert()        插入元素

    key_comp()      返回比较元素key的函数

    lower_bound()   返回键值>=给定元素的第一个位置

    max_size()      返回可以容纳的最大元素个数

    rbegin()        返回一个指向map尾部的逆向迭代器

    rend()          返回一个指向map头部的逆向迭代器

    size()          返回map中元素的个数

    swap()           交换两个map

    upper_bound()    返回键值>给定元素的第一个位置

    value_comp()     返回比较元素value的函数

    参考资料

    [1]    https://blog.csdn.net/sevenjoin/article/details/81943864

    相关文章

      网友评论

          本文标题:Map in C++

          本文链接:https://www.haomeiwen.com/subject/nwenwctx.html