当前位置: 首页 > news >正文

Python及C++中的字典


一、Python中的字典

(一)基本概念

  • 字典(dict是Python中一种可变容器模型,用于存储键值对(key:value)。字典的键必须是不可变类型(如字符串、数字或元组),而值可以是任意类型。
  • 字典的特点:
    • 键是唯一的。
    • 无序(在Python 3.7之前是无序的,3.7及以后版本在实现上保持了插入顺序,但不应依赖此特性进行有序操作)。
    • 基于哈希表实现,查找、插入和删除操作的平均时间复杂度为O(1)

(二)创建字典

  1. 直接使用花括号创建

    empty_dict = {}  # 创建一个空字典
    my_dict = {"name": "Alice", "age": 25, "is_student": False}
    
  2. 使用dict函数创建

    • 通过键值对列表创建:
      dict_from_pairs = dict([("key1", "value1"), ("key2", "value2")])
      
    • 通过关键字参数创建:
      dict_from_kwargs = dict(key1="value1", key2="value2")
      

(三)访问和操作字典

  1. 访问元素

    • 使用dict[key]访问值:
      print(my_dict["name"])  # 输出Alice
      
      如果键不存在,会抛出KeyError异常。
    • 使用get()方法访问值:
      print(my_dict.get("age"))  # 输出25
      print(my_dict.get("gender", "Unknown"))  # 输出Unknown,因为gender键不存在
      
  2. 添加和修改元素

    • 添加键值对:
      my_dict["gender"] = "Female"
      
    • 修改键值对:
      my_dict["age"] = 26
      
  3. 删除元素

    • 使用del语句删除键值对:
      del my_dict["is_student"]
      
    • 使用pop()方法删除键值对并返回值:
      value = my_dict.pop("age", None)  # 删除age键,并将对应的值赋给value
      
    • 使用clear()方法清空字典:
      my_dict.clear()
      
  4. 检查键是否存在

    • 使用in关键字:
      if "name" in my_dict:
          print("Key exists")
      

(四)遍历字典

  1. 遍历键

    for key in my_dict:
        print(key)
    
  2. 遍历值

    for value in my_dict.values():
        print(value)
    
  3. 同时遍历键和值

    for key, value in my_dict.items():
        print(key, value)
    

二、C++中的std::map

(一)基本概念

  • std::map是C++标准模板库(STL)中的一种关联容器,用于存储键值对。它基于红黑树实现,保证了键的唯一性。
  • 特点:
    • 键是唯一的。
    • 有序,键会按照升序排列。
    • 查找、插入和删除操作的时间复杂度为O(log n)

(二)创建std::map

  1. 直接初始化

    #include <map>
    #include <iostream>
    using namespace std;
    
    int main() {
        map<int, string> my_map = {{1, "Alice"}, {2, "Bob"}};
        return 0;
    }
    
  2. 使用insert()方法

    my_map.insert(pair<int, string>(3, "Charlie"));
    

(三)访问和操作std::map

  1. 访问元素

    • 使用operator[]访问值:
      cout << my_map[1] << endl;  // 输出Alice
      
      如果键不存在,operator[]会自动插入一个默认构造的值。
    • 使用at()方法访问值:
      cout << my_map.at(2) << endl;  // 输出Bob
      
      如果键不存在,at()会抛出std::out_of_range异常。
  2. 添加和修改元素

    • 添加键值对:
      my_map[3] = "Charlie";
      
    • 修改键值对:
      my_map[1] = "Alice Updated";
      
  3. 删除元素

    • 使用erase()方法删除键值对:
      my_map.erase(1);
      
    • 使用clear()方法清空整个map
      my_map.clear();
      
  4. 检查键是否存在

    • 使用find()方法:
      if (my_map.find(2) != my_map.end()) {
          cout << "Key exists" << endl;
      }
      

(四)遍历std::map

  1. 使用迭代器遍历

    for (auto it = my_map.begin(); it != my_map.end(); ++it) {
        cout << it->first << " " << it->second << endl;
    }
    
  2. 使用C++11范围for循环

    for (const auto& pair : my_map) {
        cout << pair.first << " " << pair.second << endl;
    }
    

三、C++中的std::unordered_map

(一)基本概念

  • std::unordered_map也是C++标准模板库(STL)中的一种关联容器,用于存储键值对。它基于哈希表实现,保证了键的唯一性。
  • 特点:
    • 键是唯一的。
    • 无序,键值对的存储顺序是随机的。
    • 查找、插入和删除操作的平均时间复杂度为O(1)

(二)创建std::unordered_map

  1. 直接初始化

    #include <unordered_map>
    #include <iostream>
    using namespace std;
    
    int main() {
        unordered_map<int, string> my_umap = {{1, "Alice"}, {2, "Bob"}};
        return 0;
    }
    
  2. 使用insert()方法

    my_umap.insert(pair<int, string>(3, "Charlie"));
    

(三)访问和操作std::unordered_map

  1. 访问元素

    • 使用operator[]访问值:
      cout << my_umap[1] << endl;  // 输出Alice
      
      如果键不存在,operator[]会自动插入一个默认构造的值。
    • 使用at()方法访问值:
      cout << my_umap.at(2) << endl;  // 输出Bob
      
      如果键不存在,at()会抛出std::out_of_range异常。
  2. 添加和修改元素

    • 添加键值对:
      my_umap[3] = "Charlie";
      
    • 修改键值对:
      my_umap[1] = "Alice Updated";
      
  3. 删除元素

    • 使用erase()方法删除键值对:
      my_umap.erase(1);
      
    • 使用clear()方法清空整个unordered_map
      my_umap.clear();
      
  4. 检查键是否存在

    • 使用find()方法:
      if (my_umap.find(2) != my_umap.end()) {
          cout << "Key exists" << endl;
      }
      

(四)遍历std::unordered_map

  1. 使用迭代器遍历

    for (auto it = my_umap.begin(); it != my_umap.end(); ++it) {
        cout << it->first << " " << it->second << endl;
    }
    
  2. 使用C++11范围for循环

    for (const auto& pair : my_umap) {
        cout << pair.first << " " << pair.second << endl;
    }
    

相关文章:

  • 【玩泰山派】5、点灯,驱动led-(2)ubuntu18.04 升级python3.6到python3.7,安装pip3
  • 20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常出现的list-iodomain.sh警告信息
  • 58-使用wordpress快速创建个人网站
  • Go小技巧易错点100例(二十六)
  • SpringBoot项目:部门管理系统
  • 防爆平板:石油化工厂智慧转型的“中枢神经”
  • BANK OF CHINA(HONG KONG)网点
  • Spring Bean 的生命周期
  • Tiny Cluster(1)——搭建树莓派小型计算集群
  • 【C++初学】C++核心编程技术详解(三):多态与文件操作
  • 重构艺术 | 如何优雅地“提炼函数“
  • 并查集(Java模板及优化点解析)
  • Java IO精讲:从传统IO到NIO的深度探索
  • Selenium之Actions事件
  • 达梦数据库-学习-18-ODBC数据源配置(Linux)
  • CCF CSP 第35次(2024.09)(2_字符串变换_C++)(哈希表+getline)
  • java常见线程安全实现方案
  • 05-RabbitMQ 面试题-mk
  • 电感、互感器、变压器和磁珠综合对比——《器件手册--电感/线圈/变压器/磁珠篇》
  • Python 嵌套结构的defaultdict介绍
  • 如何做销售网站/什么是软文推广
  • 专题网站建设策划书/优化设计单元测试卷答案
  • 网站建设小工具/白杨seo课程
  • wordpress 页面 html代码/柏乡seo快排优化
  • wordpress rss格式/手机seo排名
  • 做网站要固定ip/网络推广是做什么工作