算法竞赛STL:map的使用方法

算法竞赛STL:map的使用方法

map

容器描述map是一种关联容器,它存储的元素是键值对,键和值可以是任意类型。map内部的元素按照键的顺序进行排序,排序的规则由比较函数决定。

使用方法 : 首先,你需要包含头文件#include <map>,然后声明一个map对象,如std::map<int, std::string> m;。这将创建一个键为整数、值为字符串的map

底层实现map的底层通常实现为红黑树。红黑树是一种自平衡的二叉查找树,它可以在对数时间内完成查找、插入和删除操作。

支持操作

操作名 效果 传入参数 操作返回值
insert(const pair<const Key, T>& value) 插入一个键值对 value: 要插入的键值对 返回一个pair,第一个元素是指向新插入元素的迭代器,第二个元素是一个bool值,如果插入成功,返回true;否则,返回false
erase(iterator pos) 删除指定位置的元素 pos: 要删除元素的位置 返回被删除元素之后元素的迭代器
erase(const Key& key) 删除键为给定值的元素 key: 要删除的元素的键 返回被删除的元素的数量
clear() 删除所有元素
find(const Key& key) 查找键为给定值的元素 key: 要查找的元素的键 如果找到,返回指向该元素的迭代器;否则,返回end()
count(const Key& key) 返回键为给定值的元素的数量 key: 要查找的元素的键 返回元素的数量,对于map来说,返回值只能是0或1
empty() 检查map是否为空 如果map为空,返回true;否则,返回false
size() 返回map中的元素数量 返回元素数量
operator[] 访问或插入指定键的元素 key: 元素的键 返回指定键的元素的引用

常用示例

cpp 复制代码
#include <map>
#include <iostream>

int main() {
    std::map<int, std::string> m;
    m[1] = "one";
    m[2] = "two";
    for (auto it = m.begin(); it != m.end(); ++it) {
        std::cout << it->first << " => " << it->second << std::endl;
    }
    return 0;
}

经常产生的问题

  1. map的插入操作可能会改变map中其他元素的迭代器,因此在遍历map的同时插入元素是不安全的。
  2. mapoperator[]操作如果找不到指定的键,会插入一个具有该键和默认值的元素。
相关推荐
努力努力再努力wz11 分钟前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz14 分钟前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
小糖学代码21 分钟前
LLM系列:2.pytorch入门:3.基本优化思想与最小二乘法
人工智能·python·算法·机器学习·ai·数据挖掘·最小二乘法
Han_han91922 分钟前
常用API:
java·开发语言
爱写代码的倒霉蛋23 分钟前
天梯赛备赛经验分享(基础版)
经验分享·算法
minji...26 分钟前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++
uElY ITER34 分钟前
VS与SQL Sever(C语言操作数据库)
c语言·数据库·sql
Highcharts.js36 分钟前
在 React 中使用 useState 和 @highcharts/react 构建动态图表
开发语言·前端·javascript·react.js·信息可视化·前端框架·highcharts
f3iiish37 分钟前
2078. 两栋颜色不同且距离最远的房子 力扣
算法·leetcode
likerhood1 小时前
java中的return this、链式编程和Builder模式
java·开发语言