写点什么

C++ 的 list-map 链表与映射表

作者:向阳逐梦
  • 2023-07-09
    四川
  • 本文字数:1462 字

    阅读完需:约 5 分钟

C++的list-map链表与映射表

C++ list-map 链表与映射表的简单使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。

list 链表

链表是由节点之间通过指针连接而成的链式结构存储结构体,对于链表,C++标准库中已经提供了封装好的链表了。

require:

#include <list>  //1.包含头文件using namespace std;  //2.打开标准命名空间
复制代码

定义链表,并在首、尾添加、删除元素

list<int> lst;  //定义链表对象,list后<>中指定节点元素类型lst.push_front(0);  //链表头添加lst.push_back(1);   //链表尾添加lst.pop_front();  //删除头节点lst.pop_back();   //删除尾节点
复制代码

迭代器遍历链表

//begin() : 返回头节点//end()   : 返回无效的尾节点list<int>::iterator ite = lst.begin();  //定义迭代器指向头节点while(ite != lst.end()) {   //不等于链表的尾节点    cout << *ite << "  ";   //operator*    ite++;                  //operator++}
复制代码

任意位置插入或删除

//insert()  erase()ite2 = lst.insert(ite1, value);  //在 ite1 指向的位置之前插入元素value,返回插入元素的迭代器ite2 = lst.erase(ite1);  //删除 ite1 指向的节点,ite1 将失效不可用,返回删除节点的下一个节点ite = lst.erase(ite);  //多数情况下,用于删除的迭代器也可以承接其返回值,自带++效果lst.erase(ite++);  //上述情况也可以这么写
复制代码

获取首尾节点中元素的值

注意:end() 返回的是无效的尾节点,不能对其进行间接引用

获取首尾节点中元素的值
注意:end() 返回的是无效的尾节点,不能对其进行间接引用
复制代码


使用增强的范围 for 循环进行遍历链表

for (int v : lst) {    cout << v << "  ";}
复制代码

加引用可以修改节点里的值

for (int &v : lst) {    //...    v=value;    //...}
复制代码

其他常见的函数

lst.empty();  //判断当前链表是否为空(bool类型),空返回true,非空返回falselst.size();   //获取链表的长度(有效节点数量)lst.clear();  //清空链表,empty 为 ture,size 为 0
复制代码

map 映射表

map 为映射表,每一个元素称之为键值对(pair),分为键值(key)和实值(value),键值是唯一的(不能重复),所有元素都会根据元素的键值自动被排序。

require:

#include <map>  //1.包含头文件using namespace std;  //2.打开标准命名空间
复制代码

定义 map

//格式:map<key,value> mm;map<char, int> mm;
复制代码

添加

//格式:mm[key] = value;mm['B'] = 1;  //使用[]添加元素mm['D'] = 2;mm['A'] = 3;mm['C'] = 4;
复制代码

使用函数插入元素

mm.insert(pair<char, int>('E', 5));
复制代码

迭代器遍历 map

map 中的元素会自动按照键值进行排序

    map<char, int>::iterator ite = mm.begin();    while (ite != mm.end()) {        //first : 取键值,后面不要加(),second : 实值        cout << ite->first << "-" << ite->second << "   ";            ite++;    }    cout << endl;
复制代码

修改

当键值已经存在时,会直接修改实值

mm['B'] = 50;  //如果键值存在,则是通过键值修改实值
复制代码

删除

例:删除第二个元素

    ite = ++mm.begin();    ite = mm.erase(ite);  //删除 , 参数迭代器默认会失效,所以一般情况下返回值会接一下,返回的是删除的下一个
复制代码

使用增强的范围 for 循环遍历

    for (pair<char,int> pr : mm) {        cout << pr.first << "-" << pr.second << "  ";    }    cout << endl;
复制代码

使用引用,也可以修改实值

count 统计

统计某个键值出现的次数,map 键值唯一,可以用来判断某个键值是否存在

    int count = mm.count('B');  //按照键值统计,可用于判断键值是否存在    cout << count << endl;
复制代码


发布于: 2023-07-09阅读数: 35
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
C++的list-map链表与映射表_向阳逐梦_InfoQ写作社区