首页 > 编程语言 >C++ STL之map、multimap

C++ STL之map、multimap

时间:2023-09-10 23:55:46浏览次数:61  
标签:std map multimap insert STL make pair

map和multimap是C++ STL(Standard Template Library)中的关联容器,它们提供键值对的存储和访问。

map是一个有序关联容器,它存储一组键值对,其中每个键都是唯一的。map中的键值对按照键的升序排序。用户可以通过键来访问、修改和删除对应的值。map的实现通常使用平衡二叉搜索树(如红黑树)来保证高效的查找、插入和删除操作。

multimap也是一个有序关联容器,与map不同的是,multimap允许存储多个具有相同键的键值对。multimap中的键值对也按照键的升序排序。用户可以通过键来访问、修改和删除对应的值。multimap的实现通常使用平衡二叉搜索树(如红黑树)来保证高效的查找、插入和删除操作。

下面是map和multimap的一些基本操作:

  1. 插入元素:可以使用insert()函数将一个键值对插入到容器中。
  2. 查找元素:可以使用find()函数通过键来查找对应的元素。
  3. 删除元素:可以使用erase()函数通过键来删除对应的元素。
  4. 遍历元素:可以使用迭代器或C++11中的范围for循环来遍历容器中的元素。
  5. 获取元素个数:可以使用size()函数来获取容器中元素的个数。
  6. 判断容器是否为空:可以使用empty()函数来判断容器是否为空。

需要注意的是,map和multimap中的键是有序的,因此不支持通过下标访问元素的操作。此外,map和multimap中的元素默认按照键的升序排序,也可以通过自定义比较函数来实现其他排序方式。

map的示例代码

 1 #include <iostream>  
 2 #include <map>  
 3 using namespace std;  
 4   
 5 int main() {  
 6     // 创建一个map容器,键为字符串,值为整数  
 7     map<string, int> mymap;  
 8     // 插入元素  
 9     mymap.insert(make_pair("apple", 3));  
10     mymap.insert(make_pair("banana", 2));  
11     mymap.insert(make_pair("orange", 1));  
12     // 查找元素  
13     auto it = mymap.find("banana");  
14     if (it != mymap.end()) {  
15         cout << "banana: " << it->second << endl;  
16     }  
17     // 删除元素  
18     mymap.erase("apple");  
19     // 遍历元素  
20     for (auto& x : mymap) {  
21         cout << x.first << ": " << x.second << endl;  
22     }  
23     // 获取元素个数  
24     cout << "size: " << mymap.size() << endl;  
25     // 判断容器是否为空  
26     cout << "empty: " << (mymap.empty() ? "true" : "false") << endl;  
27     return 0;  
28 }

 

multimap的示例代码

 1 #include <iostream>  
 2 #include <map>  
 3 #include <string>  
 4 #include <vector>  
 5   
 6 int main() {  
 7     std::multimap<int, std::string, std::greater<int>> students;  
 8   
 9     // 添加学生  
10     students.insert(std::make_pair(90, "Alice"));  
11     students.insert(std::make_pair(85, "Bob"));  
12     students.insert(std::make_pair(95, "Charlie"));  
13     students.insert(std::make_pair(80, "David"));  
14     students.insert(std::make_pair(95, "Eve"));  
15   
16     // 输出学生列表  
17     std::cout << "Students:\n";  
18     for (const auto& student : students) {  
19         std::cout << student.second << " (" << student.first << ")\n";  
20     }  
21   
22     return 0;  
23 }

 

标签:std,map,multimap,insert,STL,make,pair
From: https://www.cnblogs.com/Arthurian/p/16653134.html

相关文章

  • HashMap
    1.数据结构HashMap主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一,是非线程安全的。HashMap可以存储null的key和value,但null作为键只能有一个,null作为值可以有多个JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要......
  • JavaScript Map 对象的用法
    JavaScript的Map对象是一种用于存储键值对的集合,其中键和值可以是任意类型的。Map对象提供了一组方法用于操作和遍历这些键值对。下面是一些常用的JavaScriptMap对象的用法:创建一个新的Map对象:varmap=newMap();添加键值对到Map对象中:map.set(key,value);获取指定键......
  • HashMap的底层原理
    HashMap哈希表(HashTable)是一种用于存储键值对的数据结构,他的底层实现在jdk1.8后是数组+链表+红黑树,在jdk1.8前是数组+链表,他通过哈希函数将键映射到储存桶中,从而实现快速的插入,查找和删除操作。哈希表的实现通常包括一个数组和一个哈希函数,其中数组用于储存键值对,哈希函数将建映......
  • mybatis核心配置文件以及mapper文件的配置
    config文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>......
  • kubectl 命令详解(十七):create configmap
    一、命令作用根据配置文件、目录或指定的literal-value创建configmap。configmap用来保存一个或多个key/value信息。当基于配置文件创建configmap时,key将默认为文件的基础名称,value默认为文件文本内容。如果基本名称的key无效,则可以指定另一个key。当基于目录创建config......
  • hashmap头插法和尾插法区别
    前言HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。开场面试官:你先自我介绍一下吧!安琪拉:我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目前在--公司做--系统开发。面试官:看你简历上写熟悉Java集合,Hash......
  • Map集合
    一,Map集合1,概述-将键映射到值的对象。Map不能包含重复的键;每个键可以映射到最多一个值。2,特点-存储元素的时候是按照键值对的方式来存储的-也称之为双列集合。-Map集合的键,可以为空,唯一,一个键对应一个值,值可重复,包括null3,Map和Collecion的区别-Map集合存储元素都是成对出......
  • KdMapper扩展实现之CrystalMark(winring0x64.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称winring0x64.sys 时间戳47......
  • STL——bitset的使用方法
    bitset介绍类似\(bool\)数组一样的东西,储存的是二进制,但是每一位只占\(1bit\),可以优化你算法的时间和空间复杂度。储存开一个bitset为:bitset<100>bs;最左边为最低位(即第\(0\)位),最右边为最高位。在初始化的时候,是从最低位开始储存。初始化有两种初始化整数bitse......
  • KdMapper扩展实现之CPUID(cpuz141.sys)
    1.背景  KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动,本文是利用其它漏洞(参考《【转载】利用签名驱动漏洞加载未签名驱动》)做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称cpuz141.sys 时间戳583446......