【c++笔记STL】map函数创建、删除、插入、更新、遍历

449次阅读
没有评论

map函数

是STL中一个挺实用的,尤其是统计某个字符数量,Python 的字典 dict 就是在这个基础上发展来的。

1、map 函数简介:

map 函数是一种键值对的容器,以键值对方式存在。

下面介绍 常见的增删改查四种方式:

3、初始化map:

#include<iostream>
#include<map>

using namespace std;

int main(){
    map<char, int> dict={
            {'a', 1},
            {'b', 2},
            {'c', 3},
    };    // 初始化一个字典,键是 char 类型,值是 int 类型 

    return 1;
}
void loop_print(map<char, int>& dict){
    // 遍历map字典

    map<char, int>::iterator item;
    item = dict.begin();
    while(item != dict.end()){
        cout<<item->first<<":"<<item->second<<endl;
        item ++;
    }
}

2、增 插入成员

通过 dict.insert() 插入成员,但是仅可以插入不存在的 key ,若存在则插入失败。

#include<iostream>
#include<map>
//#include<iterator>

using namespace std;

int main(){
    map<char, int> dict={
            {'a', 1},
            {'b', 2},
            {'c', 3},
    };

    // 1、插入数据 如果已经存在,则修改内容,如果没有则添加内容。
    dict['d'] = 4;

    // 2、插入单个值
    dict.insert(std::pair<char, int>('1', 1));
    dict.insert(std::pair<char, int>('2', 2));

    // 3、插入指定位置
    map<char, int>::iterator index;
    index = dict.begin();
    dict.insert(index, std::pair<char, int>('3', 3));

    // 4、插入多个值 列表形式 从c++11开始支持
    dict.insert({{'4', 4}, {'5', 5}});

    // 遍历数据,打印
    while(index != dict.end()){
        cout<<index->first<<":"<<index->second<<endl;
        index ++;
    }

    // 插入单个键值对,并返回插入位置和成功标志,插入位置已经存在值时,插入失败
        // pair<iterator,bool> insert (const value_type& val);

    return 1;
}

// 打印
/*
1:1
2:2
3:3
4:4
5:5
a:1
b:2
c:3
d:4
*/  

3、删除成员

有两种删除成员方法,一种是通过键删除dict.erase('key'),另一种是通过迭代器iterator,

void delete_member(map<char, int> &dict){

    // 1.根据key删除,返回删除的数量,要么是0要么是1;
    dict.erase('a');

    // 2.通过迭代器删除一定范围内的成员
    map<char, int>::iterator item=dict.begin();
    dict.erase(item);    // 删除一位    删除:b

    ++item;
    dict.erase(item, ++item);  // 删除区间内的成员,前闭后开   这里面是删除:c

    //3.清空map内的所有内容
    //dict.clear();

}

int main(){

    // 2、删除成员
    delete_member(dict);
    loop_print(dict);

    return 1;
}

//打印
d:4
e:5

4、修改成员内容

也是两种方法,一种是通过重载的 [] 修改内容,类似 Python 字典。另一种是通过迭代器 iterator ,迭代的过程中修改 value 。具体用法请看下方代码样例。

void update_member(map<char, int>&dict){

        // 1、通过键修改
    dict['a'] = 666;

        // 2、通过迭代器修改内容
    map<char, int>::iterator item=dict.begin();
    int tmp; // 存放key的值
    while(item != dict.end()){
        if(item->first == 'b'){  // 只修改key:b的值为888
            tmp = item->second;
            item->second = tmp + 886;
        }
        item++;  // 迭代到下一个
    }

}

int main(){

    // 3、修改内容
    update_member(dict);
    loop_print(dict);

    return 1;
}

//打印

a:666
b:888
c:3
d:4
e:5

5、查找

通过 map.find("key") 查找键,返回的是该关键字的迭代器。若没找到元素则返回指向 end 的迭代器

void find_member(map<char, int>&dict){
    // 1、若没找到关键字 a ,则返回指向end的迭代器
    map<char, int>::iterator res = dict.find('a');
    if(res!=dict.end()){    // 判断是否找到 'a'
        cout<<res->first<<":"<<res->second;
    }
    // 2、或者使用count,查找是否含有key a,要么0要么1
    int number = dict.count('a');
    cout<<"a:"<<number<<endl;

}

int main(){

    // 4、查找
    find_member(dict);

    return 1;
}

//打印
a:1
a:1

6、容量查询

void query_map(map<char, int>&dict){

    // 查询map中的键值对的个数
    int map_size = dict.size();
    cout<<"map_size:"<<map_size<<endl;

    // 查询map是否为空
    dict.empty();

}

总结:

Just do it!

参考链接:

https://blog.csdn.net/shuzfan/article/details/53115922

https://www.renfei.org/blog/introduction-to-cpp-string.html

https://blog.csdn.net/wusecaiyun/article/details/49563197

3
西园公子
版权声明:本站原创文章,由西园公子2021-02-15发表,共计2791字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...