首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】map、set、multimap、multiset的介绍使用

find用于查找set某个元素val,找到就返回键值对对应的迭代器,否则就返回end迭代器。...的键值对 multiset s(array, array + sizeof(array)/sizeof(array[0])); for (auto& e : s)...对于map来说,*it拿到的是pair的对象,所以我们还需要再加一个.操作符才能访问pair对象里面的firstsecond值,但这样写起来有点麻烦,所以map迭代器也重载了→操作符,→重载的函数会返回迭代器指向对象的地址...(语法糖遍历拿到的值其实就是*it,在map这里就是pair对象,键值对) int main() { map dict; dict.insert(pair<string...我们可以用排序的思路来解决这道题,定义stringint的键值对,然后将所有单词存到map里面,这样map里面就有单词单词出现的次数的键值对了,并且string还是按照字典顺序排好了。

64630
您找到你想要的搜索结果了吗?
是的
没有找到

C++:mapset的认识简单使用关联式容器

比如,英汉翻译,苹果对应着apple,香蕉对应着banana。 pair/make_pair mapset底层实现原理都是二叉树,准确地来说,是红黑树。...通过pair来绑定键值对,比如pair("str",1)。其中,pair可以使用make_pair来替换,make_pair("str",1)。...⑥set在底层是用二叉搜索树(红黑树)实现的 ⑦set查找某个元素,时间复杂度为:long_2 N ⑧set的元素不可以重复(因此可以使用set进行去重) ⑨使用set的迭代器遍历set的元素,可以得到有序序列...③map通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map的元素进行迭代时,可以得到一个有序的序列)。...⑤map的底层为平衡搜索树(红黑树),查找效率比较高O(log_2 N) ⑥支持[]操作符,operator[]实际进行插入查找 multimap容器 multimapmap的唯一不同就是:map

49610

【C++】map set

注:可能有的同学对 O(logN) 的时间复杂度没有什么具体的概念,那么我们可以列举一组数据大家就很清楚了:set 1000个数据找查找某个数据最多找10次,100万个数据找某一个数据最多找20次...,10亿个数据找某一个数据最多找30次;换一种说法,如果以身份证号作为 key 值存入 set (假设内存足够),那么我们地球所有人类查找某一个身份证号对应的人时最多只用找 31 次;相信现在大家对...int array[] = { 1, 3, 5, 7, 3, 2, 4, 6, 8, 0, 1, 3, 5, 7, 3, 2, 4, 6, 8, 3 }; multiset s(array...,返回的 pair 存放着该节点位置的迭代false;如果 map 没有与该值相等的节点,则会向 map 插 key 值等于 k 的节点,该节点对应的 value 值为 V 默认构造的缺省值;..., string> m; //向map插入元素的方式:用pair直接来构造键值对 m.insert(pair("peach", "桃子")); //为了方便,我们建议直接用

56300

C++进阶:详细讲解容器set与mappair、multiset、multimap)

插入、删除、查找等操作的平均时间复杂度是 O(log n)。 序列式容器: 序列式容器包括 std::vector, std::list, std::deque, std::array 等。...拷贝构造函数: template pair (const pair& pr); 拷贝构造函数用于另一个 std::pair 对象 pr 复制键值对来构造一个新的... m1;//空的 map m2(m1);//拷贝构造 } 5.3 迭代器,insert,find ,[]重载 5.3.1 迭代器 下面是关于.../ C++11 多参数隐式类型转换(构造函数支持) } 5.3.3 find() 函数 在 map ,find 函数用于查找指定键的元素,并返回指向该元素的迭代器。...const_iterator find(const key_type& k) const; 在常量 map 查找键值为 k 的元素,并返回一个指向该元素的迭代器。

19810

C++【set map 学习及使用】

---- 前言 set map 是 STL 的容器之一,不同于普通容器,它俩的查找速度极快,常用来存储各种经常被检索的数据,因为这俩容器的底层是平衡二叉搜索树的红黑树。...的 键值 实值 时,需要通过 pair 对象指定访问,比如 e.first map 的常用功能 功能 用途 迭代器 遍历容器 empty 判断容器是否为空 size 当前容器的元素数 max_size...make_pair("B", 66)}; map m1(arr.begin(), arr.end()); //迭代器遍历 cout << "迭代器遍历结果: ";...operator[] 除了 允许键值冗余 没有 operator[] 这个两个特点外,multimap map 在操作上没有区别 当然,查找 find 时,返回的是序遍历第一次出现元素的迭代器...使得 原链表节点新链表节点之间形成了一种羁绊关系,但 两者之间互不影响 ---- 5、补充:交集与差集 下面是一些补充知识,主要是关于 交集差集 的 5.1、如何查找交集?

24120

C++的STLmap用法详解

1、map简介map是一类关联式容器。它的特点是增加删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。...,当然是返回1了第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。...查找map是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()end()两个成员,分别代表map对象第一个条目最后一个条目,这两个数据的类型是iterator...里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map不出现这个关键字,程序说明#include second::iterator, map<int, string

2.7K20

6.1 C++ STL 序列映射容器

Map的所有元素都会根据元素的键值自动排序,所有的元素都是一个Pair同时拥有实值键值,Pair的第一个元素被视为键值,第二个元素则被视为实值,Map 容器不允许两个元素有相同的键出现。...代码首先创建了两个pair对象pp2,分别用stringint类型的值进行初始化。接着创建了一个set对象var,用来存储int类型的元素。...正向遍历反向遍历分别使用了map迭代反向迭代器。...代码中演示了如何使用map的find、lower_bound、upper_bound方法来查找指定的键值对,分别返回该元素的迭代器、第一个大于等于该元素的迭代第一个大于该元素的迭代器。...接着,通过迭代器遍历整个map容器,将每个学生的ID姓名输出到屏幕上。最后,通过使用map容器的find方法,查找学生ID为1的学生信息,并将其姓名输出到屏幕上。

17950

C++ STL 标准模板库(容器总结)算法

String 字串操作容器 String字符串操作容器是C++标准实现的一个重要容器,其主要用于对字符串的高效处理,它C风格string.h并不是同一个库,两个库有极大的差距,C库string.h...容器,双向链表任一位置的元素,查找,插入删除,都具有高效的常数阶算法时间复杂度O(1)....Map的所有元素都会根据元素的键值自动排序,所有的元素都是一个Pair同时拥有实值键值,Pair的第一个元素被视为键值,第二个元素则被视为实值,Map 容器不允许两个元素有相同的键出现....通过对组实现键值对: 对组pair是一个键值对的组合,类似于一个字典,每个对组,包含1个key1个value....[]) { map mp; // 三种方式实现map容器插入操作 mp.insert(pair("admin0", 100)); mp.insert

2.2K10

6.1 C++ STL 序列映射容器

Map的所有元素都会根据元素的键值自动排序,所有的元素都是一个Pair同时拥有实值键值,Pair的第一个元素被视为键值,第二个元素则被视为实值,Map 容器不允许两个元素有相同的键出现。...代码首先创建了两个pair对象pp2,分别用stringint类型的值进行初始化。接着创建了一个set对象var,用来存储int类型的元素。...正向遍历反向遍历分别使用了map迭代反向迭代器。...代码中演示了如何使用map的find、lower_bound、upper_bound方法来查找指定的键值对,分别返回该元素的迭代器、第一个大于等于该元素的迭代第一个大于该元素的迭代器。...接着,通过迭代器遍历整个map容器,将每个学生的ID姓名输出到屏幕上。最后,通过使用map容器的find方法,查找学生ID为1的学生信息,并将其姓名输出到屏幕上。

16220

C++ stl_stl函数

常用的数据结构:数组(array) , 链表(list), tree(树),栈(stack), 队列(queue), 集合(set),映射表(map), 根据数据在容器的排列特性,这些数据分为序列式容器关联式容器两种...查找替换 int find(const string& str, int pos = 0) const; //查找str第一次出现位置,pos开始查找 int find(const char* s,...int pos = 0) const; //查找s第一次出现位置,pos开始查找 int find(const char* s, int pos, int n) const; //pos位置查找...Map所有的元素都是pair,同时拥有实值键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。...map查找操作 find(key);//查找键key是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回map.end(); count(keyElem);//返回容器key为keyElem的对组个数

2.4K31

一万五千字C++STL【容器】详解 (全网最详细)

array(数组) 1)基本概念介绍 array是C++11新增的容器,它与其他容器不同的是,它的大小是固定的,无法动态扩展或收缩,只允许访问或者替换存储的元素。...firstsecond来访问对组的两个元素 pair p("Tom", 20); cout << "姓名:" << p.first << "\t年龄:" << p.second...,对两个map容器的值进行交换 //交换 map m1; //第一个:key(键值) 第二个:value(实值) m1.insert(pair(1, 10...()查找函数,在map可以利用键值来查找相应的实值,比如这里find(3),显示的便是对应的实值30;而对于count统计也是同理,count(3)的意思是统计键值为3的数有多少个,但是对于map容器...对于删除erase(),也是可以通过它的key值来删除对应的value值,这在实际的开发还是会起到一定的作用,不需要一个个去查找 map m; //插入 //① m.insert

2K20

【C++】map & set

set 的元素不可以重复 (因此可以使用set进行去重) ; 使用 set 的迭代器遍历 set 的元素,可以得到有序序列; set 的元素默认按照小于来比较; set 查找某个元素,时间复杂度为...map 通过键值访问单个元素的速度通常比 unordered_map 容器慢,但 map 允许根据顺序对元素进行直接迭代(即对map的元素进行迭代时,可以得到一个有序的序列)。...然后其它接口的使用 set 的用法差不多,只是 map 的类型变成了 pair 而已;所以其它接口不再进行介绍,下面开始介绍 map 的最重要的接口:operator[]. operator[] 如上图下图...支持 [] 操作符,operator[] 实际进行插入查找; 4. multimap 我们可以看一下文档介绍:multimap 文档介绍 multimap map 的唯一不同就是:map 的 key...& words, int k) { priority_queue, vector>

9510

C++STL之map的基本操作

STL基本的关联式容器有mapset,它们都是以红黑树作为其底层的结构,具有非常高的查找、删除效率,内容会按照键值自动排序。...3、insert插入操作会用到pair结构,pair结构在utility头文件 4、查找数据时,如果使用find,并且要查找的键值不存在,那么不会对原集合造成影响,如果使用[]查找,并且要查找的值不存在...pair的内容不一样,要插入的pair第一个是键值,第二个是实值, 12 //返回值pair,第一个是一个map迭代器表示插入数据在容器的位置,...第二个是bool类型,插入成功返回1,否则返回0; 13 map hash; 14 typedef pair value; 15...,如果键值比较有规律可以使用[]结合循环,否则使用迭代器 79 80 81 //删除数据 82 //maperase有三个版本可以删除键值指定的数据,迭代器指定的数据迭代器指定区间的数据

85990
领券