c++中map与set的基本使用

embedded/2024/9/25 8:35:31/

c++中的map容器与set容器

map的所有函数方法及其用法

在C++中,std::map 是一个关联容器,它包含可以重复的键值对(实际上,std::map中的键是唯一的)。每个元素都有一个唯一的键和一个与之关联的值。std::map通常按照其键的升序对元素进行排序。

以下是一些std::map的常用成员函数及其用法:

  1. 构造函数和析构函数

    • map(): 默认构造函数,创建一个空的map
    • map(const map& other): 拷贝构造函数。
    • ~map(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回map中元素的数量。
    • bool empty() const noexcept: 如果map为空,则返回true
  3. 元素访问

    • mapped_type& operator[](const key_type& key): 通过键访问元素(如果键不存在,则插入一个新元素)。
    • mapped_type& at(const key_type& key): 通过键访问元素(如果键不存在,则抛出std::out_of_range异常)。
    • mapped_type& at(const key_type& key) const: 类似上面的at,但返回常量引用。
    • iterator find(const key_type& key): 查找键为key的元素,如果找到则返回指向该元素的迭代器,否则返回end()
    • const_iterator find(const key_type& key) const: 同上,但返回常量迭代器。
  4. 插入和删除

    • pair<iterator,bool> insert(const value_type& val): 插入一个元素,如果键已存在则不插入。返回一个pair,其中迭代器指向插入的元素(或已存在的元素),布尔值表示是否插入了新元素。
    • iterator insert(const_iterator pos, const value_type& val): 在指定位置之前插入元素,但位置只是提示,不保证元素真的在那里插入。
    • iterator erase(const_iterator position): 删除指定位置的元素。
    • size_type erase(const key_type& key): 删除键为key的元素,并返回被删除的元素数量(0或1)。
    • iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。
    • void clear() noexcept: 删除所有元素。
  5. 修改器

    • void swap(map& other) noexcept: 交换两个map的内容。
  6. 迭代器

    • iterator begin() noexcept: 返回指向第一个元素的迭代器。
    • const_iterator begin() const noexcept: 同上,但返回常量迭代器。
    • iterator end() noexcept: 返回指向容器“尾部之后”的迭代器。
    • const_iterator end() const noexcept: 同上,但返回常量迭代器。
    • reverse_iterator rbegin() noexcept: 返回指向最后一个元素的反向迭代器。
    • const_reverse_iterator rbegin() const noexcept: 同上,但返回常量反向迭代器。
    • reverse_iterator rend() noexcept: 返回指向“反向尾部之前”的反向迭代器。
    • const_reverse_iterator rend() const noexcept: 同上,但返回常量反向迭代器。
  7. 观察者

    • key_compare key_comp() const: 返回用于比较键的函数对象。
    • value_compare value_comp() const: 返回用于比较值的函数对象(实际上它使用键比较)。

这只是std::map的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。

set的所有函数方法及其用法


在C++中,std::set是一个关联容器,它包含唯一元素。与std::map类似,std::set的元素在插入时自动按键(在这种情况下,键和值相同)的升序排序。但是,与std::map不同,std::set仅存储键,并不与任何关联的值一起存储。

以下是一些std::set的常用成员函数及其用法:

  1. 构造函数和析构函数

    • set(): 默认构造函数,创建一个空的set
    • set(const set& other): 拷贝构造函数。
    • ~set(): 析构函数。
  2. 大小操作

    • size_type size() const noexcept: 返回set中元素的数量。
    • bool empty() const noexcept: 如果set为空,则返回true
  3. 元素访问

    • 由于set不存储值,因此没有直接访问元素值的函数。但是,你可以通过迭代器来遍历set中的所有元素。
  4. 插入和删除

    • pair<iterator,bool> insert(const value_type& val): 尝试插入一个元素。如果元素已存在,则插入失败,并返回表示该元素已经存在的pair(迭代器指向已存在的元素,bool值为false)。如果元素不存在,则插入新元素,并返回表示插入成功的pair(迭代器指向新插入的元素,bool值为true)。
    • iterator insert(const_iterator pos, const value_type& val): 在指定位置之前尝试插入元素。但是请注意,由于set中的元素是有序的,因此这个位置只是一个提示,实际插入位置可能会不同。
    • iterator erase(const_iterator position): 删除指定位置的元素。
    • size_type erase(const key_type& key): 删除键为key的元素(如果存在),并返回被删除的元素数量(0或1)。
    • iterator erase(const_iterator first, const_iterator last): 删除一个范围内的元素。
    • void clear() noexcept: 删除所有元素。
  5. 查找

    • iterator find(const key_type& key): 查找键为key的元素。如果找到,则返回指向该元素的迭代器;否则返回end()
    • const_iterator find(const key_type& key) const: 同上,但返回常量迭代器。
    • size_type count(const key_type& key) const noexcept: 返回键为key的元素的数量(对于set,这总是0或1)。
    • iterator lower_bound(const key_type& key): 返回指向第一个不小于(即大于或等于)key的元素的迭代器。
    • iterator upper_bound(const key_type& key): 返回指向第一个大于key的元素的迭代器。
    • pair<iterator,iterator> equal_range(const key_type& key): 返回一个范围,其中包含所有键等于key的元素。对于set,这个范围可能只包含一个元素或为空。
  6. 迭代器

    • std::map类似,std::set也提供了一系列相似的迭代器函数来遍历容器中的元素。
  7. 观察者

    • key_compare key_comp() const: 返回用于比较键的函数对象。

这只是std::set的一些常用成员函数。要了解更多详细信息,建议查阅C++标准库文档或相关书籍。

拓展

使用 set 可以获取容器中的最大最小值:

set<int> s;//第一个数值(最小值)的函数为*s.begin();
cout<<"s的最小值:"<<*s.begin()<<endl;//最后一个数值(最大值)的函数为*s.rbegin();
cout<<"s的最大值为:"<<*s.rbegin()<<endl;
//或者是
cout<<"s的最大值为:"<<*(--s.end())<<endl;
//注意不能是s.end() ,因为s.end()指向的是容器“尾部之后”的迭代器

http://www.ppmy.cn/embedded/33160.html

相关文章

Linux的基础IO:文件系统

目录 学前补充 磁盘的存储结构 OS如何对磁盘的存储进行逻辑抽象 细节内容 学前补充 问题&#xff1a;计算机只认二进制&#xff0c;即0、1&#xff0c;什么是0、1&#xff1f; 解释&#xff1a;0、1在物理层面可能有不同的表现&#xff0c;0、1是数字逻辑&#xff0c;可以…

IP 寻址与地址解析

目录 前言 1.IP 分类地址 2.IP 子网与超网 3.组成 IP 超网 4.无类地址与 CIDR 5.配置管理 6.地址解析 总结 前言 在互联网协议 (IP) 的世界中&#xff0c;寻址和地址解析是关键概念。它们使设备能够在互联网上唯一地标识和相互通信。让我们深入了解 IP 寻址、子网、超网…

【Conda】解决使用清华源创建虚拟环境不成功问题

文章目录 问题描述&#xff1a;清华源创建不成功解决步骤1 添加官方源步骤2 删除C:/user/你的用户名/的 .condarc 文件步骤3 再次创建 问题描述&#xff1a;清华源创建不成功 本地配置了清华源&#xff0c;但是在创建虚拟环境时不成功&#xff0c;报错如下。 图片若看不清&…

轻松应对数据恢复挑战:雷神笔记本,不同情况不同策略

在数字化时代&#xff0c;数据无疑是我们生活中不可或缺的一部分。无论是重要的工作文件、珍贵的家庭照片&#xff0c;还是回忆满满的视频&#xff0c;一旦丢失&#xff0c;都可能给我们的生活带来诸多不便。雷神笔记本作为市场上备受欢迎的电脑品牌&#xff0c;用户在使用过程…

Django之单文件上传(以图片为例)

一&#xff0c;创建项目 初始化&#xff0c;数据迁移&#xff0c;创建superuser&#xff0c;创建app等 二&#xff0c;配置settings.py 1&#xff0c;配置数据库&#xff08;本作者使用的mysql&#xff09;&#xff0c;以前文章有提到 2&#xff0c;配置静态文件存放路径 STAT…

【LinuxC语言】信号相关函数——kill、raise、pause与alarm

文章目录 前言一、函数介绍1.1 kill() 函数1.2 raise() 函数1.3 pause() 函数1.4 alarm() 函数 总结 前言 在Linux环境下&#xff0c;信号是一种重要的进程间通信机制&#xff0c;用于处理异步事件和控制进程行为。除了使用signal函数来设置信号处理函数外&#xff0c;还有一些…

C语言:文件操作(下)

片头 嗨&#xff01;小伙伴们&#xff0c;在前2篇中&#xff0c;我们分别讲述了C语言&#xff1a;文件操作&#xff08;上&#xff09;和 C语言&#xff1a;文件操作&#xff08;中&#xff09;&#xff0c;今天我们将会学习文件操作&#xff08;下&#xff09;&#xff0c;准…

模型智能体开发之metagpt-多智能体实践

参考&#xff1a; metagpt环境配置参考模型智能体开发之metagpt-单智能体实践 需求分析 之前有过单智能体的测试case&#xff0c;但是现实生活场景是很复杂的&#xff0c;所以单智能体远远不能满足我们的诉求&#xff0c;所以仍然还需要了解多智能体的实现。通过多个role对动…