map、multimap容器

map的所有元素都是pair,同时拥有键值(key)和实值(value)

pair的第一元素被视为键值,第二元素被视为实值

性质:

以rb_tree为底层结构,因此元素有自动排序的特性,排序的依据是key;
提供遍历操作和迭代器,正常的++ite遍历,便能得到排序状态;
无法使用map/multimap来改变元素的key,但可以用来改变元素的data。
map元素的key必须独一无二,因此insert()使用的是rb_tree的insert_unique();
multimap元素的key可以重复,因此inset()使用的是rb_tree的insert_equal(). map和multimap:底层实现都是红黑树,所以是有序的,按照key值排序,区别在于map的key值不允许重复,而miltimap的key值可以重复; unordered_map:key不能重复,无序

添加一道Leetcode题

题目:

给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。
返回的结果必须要是按升序排好的。

整数 a 比整数 b 更接近 x 需要满足:

|a - x| < |b - x| 或者
|a - x| == |b - x| 且 a < b

示例 1:

输入:arr = [1,2,3,4,5], k = 4, x = 3

输出:[1,2,3,4]

示例 2:

输入:arr = [1,2,3,4,5], k = 4, x = -1

输出:[1,2,3,4]

提示:

1 <= k <= arr.length
1 <= arr.length <= 104
arr 按 升序 排列
-104 <= arr[i], x <= 104

题解:

class Solution {
public:
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
// 哈希表,差值的绝对值做key,arr的元素值做value
// map和multimap:底层实现都是红黑树,所以是有序的,按照key值排序,区别在于map的key值不允许重复,而miltimap的key值可以重复; multimap<int,int> m_m; for(int i=0;i<arr.size();++i)
{
int key = abs(arr[i]-x);
m_m.insert(make_pair(key,arr[i]));
} vector<int> v;
multimap<int,int>::iterator it = m_m.begin();
for(int i=0;i<k; ++i,++it)
{
v.emplace_back(it->second);
//本来想用pair中的get函数的,结果没成功,应该是 get<>(【piar】), 里面的pair不能是迭代器的原因
} sort(v.begin(),v.end());
return v;
}

};

C++中map,multimap和unordered_map的区别的更多相关文章

  1. java中Map,List与Set的区别(转)

    Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...

  2. java中Map,List与Set的区别

    Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...

  3. STL set multiset map multimap unordered_set unordered_map example

    I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chines ...

  4. spark中map和mapPartitions算子的区别

    区别: 1.map是对rdd中每一个元素进行操作 2.mapPartitions是对rdd中每个partition的迭代器进行操作 mapPartitions优点: 1.若是普通map,比如一个par ...

  5. 原 c++中map与unordered_map的区别

    c++中map与unordered_map的区别 头文件 map: #include < map > unordered_map: #include < unordered_map ...

  6. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

    Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...

  7. STL中 map 和 multimap

    1. 所在头文件<map>. 命名空间std, 声明如下: namespace std{ template <class Key,class T, class Compare = l ...

  8. STL中的map/multimap小结

    (1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)n ...

  9. charles中Map、Rewrite、Breakpoints的区别

    Charles提供了Map功能.Rewrite功能.Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是: Map Map功能适合长期的将某些请求重定向到另一个网络地址或本地 ...

  10. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

随机推荐

  1. MySQL系列之——MySQL介绍和安装、MySQL简介及产品线、安装方式(源码安装 rpm方式 yum方式 通用二进制安装)

    文章目录 一 MySQL介绍和安装 1.1 什么是数据? 1.2 什么是数据库管理系统(DBMS)? 1.3 数据库管理系统种类 二 MySQL简介及产品线 2.1 MySQL行业主流版本 2.2 企 ...

  2. .Net析构函数再论(CLR源码级的剖析)

    前言 碰到一些问题,发觉依旧没有全面了解完全析构函数.本篇继续看下析构函数的一些引申知识. 概述 析构函数目前发现的总共有三个标记,这里分别一一介绍下.先上一段代码: internal class P ...

  3. 【RocketMQ】RocketMQ存储结构设计

    CommitLog 生产者向Broker发送的消息,会以顺序写的方式,写入CommitLog文件,CommitLog文件的根目录由配置参数storePathRootDir决定,默认每一个CommitL ...

  4. 15. 从零开始编写一个类nginx工具, 如果将nginx.conf转成yaml,toml,json会怎么样

    wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...

  5. Vue之交互

    1.get() <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. 推荐一款“自学编程”的宝藏网站!详解版~(在线编程练习,项目实战,免费Gpt等)

    云端源想学习平台,一站式编程服务网站云端源想官网传送门 精品课程:由项目实战为导向的视频课程,知识点讲解配套编程练习,让初学者有方向有目标. 课程阶段:每门课程都分多个阶段进行,由浅入深,很适合零基础 ...

  7. 队列(c++源码)

    queue.h #ifndef QUEUE_H_ #define QUEUE_H_ #include<iostream> template<class T> struct No ...

  8. 一个java文件的JVM之旅

    准备 我是小C同学编写得一个java文件,如何实现我的功能呢?需要去JVM(Java Virtual Machine)这个地方旅行. 变身 我高高兴兴的来到JVM,想要开始JVM之旅,它确说:&quo ...

  9. 排序:使数组唯一的最小增量 (3.22 leetcode每日打卡)

    给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例 1: 输入:[1,2,2]输出:1解释:经过一次 move 操作, ...

  10. [GitOps] 白嫖神器Github Actions,构建、推送Docker镜像一路畅通无阻

    [GitOps] 白嫖神器Github Actions,构建.推送Docker镜像一路畅通无阻 引言   当你没找到合适的基础的Docker镜像时,是否会一时冲动,想去自己构建.然而因为网络问题,各种 ...