C++:有序关联容器map

map介绍

map 是一种关联容器,它存储的元素是键值对(key-value pairs),其中每个键都映射到其关联的值上。

map 内部通常实现为一个红黑树,这意味着元素总是按键的顺序存储,这使得元素的查找、插入和删除操作都能在对数时间内完成。

基本操作

  • 包含头文件:首先,要使用 map,你需要包含 头文件。
  • 声明 map:你可以使用模板语法来声明一个 map,指定键和值的类型。
  • 插入元素:可以使用 insert() 方法或者通过下标操作符 [] 插入元素。
  • 访问元素:通过键使用下标操作符 [] 访问元素(如果键不存在,则插入一个具有该键的新元素)。
  • 遍历 map:可以使用迭代器遍历 map 中的所有元素。
  • 删除元素:可以使用 erase() 方法删除元素。

演示

c 复制代码
#include <iostream>  
#include <map>  
#include <string>  
  
int main() {  
    // 声明一个map,键为string类型,值为int类型  
    std::map<std::string, int> ageMap;  
  
    // 插入元素  
    ageMap["Alice"] = 30;  
    ageMap["Bob"] = 25;  
    ageMap.insert(std::make_pair("Charlie", 35));  
  
    // 访问元素  
    std::cout << "Alice's age: " << ageMap["Alice"] << std::endl;  
  
    // 遍历map  
    for (auto it = ageMap.begin(); it != ageMap.end(); ++it) {  
        std::cout << it->first << ": " << it->second << std::endl;  
    }  
  
    // 删除元素  
    ageMap.erase("Bob");  
  
    // 再次遍历map以确认Bob已被删除  
    std::cout << "\nAfter erasing Bob:" << std::endl;  
    for (const auto& pair : ageMap) {  
        std::cout << pair.first << ": " << pair.second << std::endl;  
    }  
  
    return 0;  
}

map中存的元素都是一个一个的pair,访问map的key和value要先从map找到pair,再去first和second

pair

pair 是一种模板结构体,用于存储两个值,这两个值可以是不同的数据类型。

pair 在 头文件中定义,它提供了一种便捷的方式来将两个数据项捆绑在一起作为一个单元来处理。

基本操作

  • 包含头文件:要使用 pair,需要包含 头文件。
  • 创建 pair:可以直接使用 pair 的构造函数创建,或者使用 make_pair 函数(虽然 C++11 引入了统一初始化列表后,make_pair 的使用变得不那么必要了)。
  • 访问 pair 的元素:可以通过 first 和 second 成员来访问 pair 中的元素。
  • 比较 pair:pair 可以直接进行比较,比较首先基于 first 成员,如果 first 相同,则基于 second 成员。

演示

c 复制代码
#include <iostream>  
#include <utility> // 对于C++11及以后,如果仅使用pair,这个头文件可能不是必需的  
  
int main() {  
    // 使用构造函数创建pair  
    std::pair<std::string, int> person1("Alice", 30);  
  
    // 使用make_pair函数创建pair(虽然这里直接初始化可能更简洁)  
    std::pair<std::string, int> person2 = std::make_pair("Bob", 25);  
  
    // C++11及以后,可以使用统一初始化列表  
    std::pair<std::string, int> person3 = {"Charlie", 35};  
  
    // 访问pair的元素  
    std::cout << "Person 1: " << person1.first << ", " << person1.second << std::endl;  
    std::cout << "Person 2: " << person2.first << ", " << person2.second << std::endl;  
    std::cout << "Person 3: " << person3.first << ", " << person3.second << std::endl;  
  
    // 比较pair  
    if (person1 < person2) {  
        std::cout << "Person 1 comes before Person 2." << std::endl;  
    } else {  
        std::cout << "Person 1 does not come before Person 2." << std::endl;  
    }  
  
    // 注意:比较首先基于first,如果first相同,则基于second  
    if (person1.first == person3.first && person1.second < person3.second) {  
        std::cout << "Person 1 and Person 3 have the same name, but Person 1 is younger." << std::endl;  
    }  
  
    return 0;  
}
相关推荐
Eiceblue32 分钟前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
tan180°1 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
m0_555762901 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
浪裡遊2 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
彭祥.2 小时前
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
c++·opencv·分类
lzb_kkk3 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
好开心啊没烦恼3 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
简佐义的博客3 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
程序员爱钓鱼4 小时前
【无标题】Go语言中的反射机制 — 元编程技巧与注意事项
开发语言·qt