首页 > 编程语言 >C++中map,multimap和unordered_map的区别

C++中map,multimap和unordered_map的区别

时间:2022-08-25 15:48:22浏览次数:51  
标签:map arr multimap 元素 key 排序 unordered

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;
}

};

标签:map,arr,multimap,元素,key,排序,unordered
From: https://www.cnblogs.com/xushuwuxingqu/p/16624466.html

相关文章

  • Color Map
    Source1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<math.h>56#defineXLEN10247#defineYLEN102489intmain......
  • Java 8 如何快速的将List<T>转换成List<Map<String,Object>>
    实际开发过程中,经常会遇到需要将List<T>转换List<Map<String,Object>>的情况,那么你们都是用什么方法实现的呢?下面是我开发过程中使用的方法,还望大佬看后轻喷。List<Map<......
  • 面经-HashTable与ConcurrentHashMap比较
    HashTable与ConcurrentHashMap比较1.HashTable与ConcurrentHashMap都是线程安全的Map集合。2.HashTable与ConcurrentHashMap的键和值都不能为空。3.HashTable并发度低,整......
  • java中遍历map的三种方式
    publicstaticvoidmain(String[]args){HashMap<String,String>map=newHashMap<>();map.put("1","A");map.put("2","B");......
  • MapReduce-day1
    MapReducehadoop-ha问题dfs.ha.fencing.methods表示:alistofscriptsorJavaclasseswhichwillbeusedtofencetheActiveNameNodeduringafailover而配置......
  • 关于 map 的迭代器
     今天遇到一个问题CountCompileResult(constLIST_MAP&rfLmCompileWafers){    for(autoitr=rfLmCompileWafers.begin();itr!=rfLmCompileWafers.e......
  • MapStruct映射工具
    一、mapStruct映射工具1.1功能在编译时期是处理映射注解,实现类到类之间的映射MapStructvsBeanUtilsBeanUtils:在运行时根据反射动态赋值缺点:动态赋值,存在大量......
  • postmapping和RequestMapping的区别
    postmapping和RequestMapping的区别@GetMapping用于将HTTPGET请求映射到特定处理程序方法的注释。具体来说,@GetMapping是一个作为快捷方式的组合注释@RequestMapping(......
  • 简述JS中forEach()、map()、every()、some()和filter()的用法
    在文章开头,先问大家一个问题:在Javascript中,如何处理数组中的每一项数据?有人可能会说,这还不简单,直接一个for循环遍历一下就好了。是的,确实,这是最常见的做法。但是,除......
  • mybatis mapper的加载过程
    mapper的加载过程在mybatis配置文件的整体加载过程一文中,最后我们说到在parseConfiguration方法中会加载mybatis的xml配置文件的mappers属性.而mapper属性中定义了所......