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

C++:set、map的使用及其特性和区别

下面介绍一下这四种容器的简单使用。 1.set set里面每个元素只存有一个key值,它支持高效的关键字查询操作,比如检查一个关键字是否在set中。如果这个key值之前存在的话就不插入。...简单使用如下: 插入: set s; s.insert(2); s.insert(1); s.insert(4); s.insert(5); s.insert(3); s.insert(5);...查找: //时间复杂度:O(logN)----底层是搜索树 set::iterator pos = s.find(3); //时间复杂度:O(N)----需要遍历一遍(不建议使用) //set...里面的元素可以根据键进行自动排序,由于map是key_value的形式,所以map里的所有元素都是pair类型。pair里面的first被称为key(键),second被称为value(值)。...它可以通过关键字查找映射关联信息value,同时根据key值进行排序。

46500

C++ STL之map容器用法详解 (包含pair,make_pair等等)

字符串经常被用来作为键,如果想要保存姓名和地址的记录,就可以这么使用。名称通常可能是一个或多个字符串。...pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。...2 make_pair函数 template pair make_pair(T1 a, T2 b) { return pair(a, b); } 很明显,我们可以使用pair的构造函数也可以使用make_pair...数据的查找(包括判定这个关键字是否在map中出现) 在这里我们将体会,map在数据插入时保证有序的好处。...要判定一个数据(关键字)是否在map中出现的方法比较多,这里标题虽然是数据的查找,在这里将穿插着大量的map基本用法。

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

11.1 C++ STL 应用字典与列表

最后,该程序使用迭代器循环遍历map容器,将所有键值对按照key的降序依次输出。该代码的核心功能是创建一个带有某种关键字类型的std::map容器,并实现基本的添加数据和遍历数据的操作。...第一种查找算法,使用find()函数在vector容器中查找特定元素,如果查找成功,则输出元素在容器中的位置(下标)。注意,该函数查找序列中的第一个符合条件的元素。...第二种查找算法,使用find_first_of()函数在两个vector容器之间查找相同元素,如果查找成功,则输出该元素及其位置。...key中的value bool set_dict_value(std::map& ptr, int set_key, int set_value) { ptr[set_key]...需要注意的是,在标准库实现弹出随机数的函数中,随机数生成器需要使用当前的系统时间作为种子,因此可产生结果不同的随机数序列。

39540

C++中的STL中map用法详解

3、使用map使用map得包含map类所在的头文件#include   //注意,STL头文件没有扩展名.hmap对象是模板类,需要关键字和存储对象两个模板参数:std:map personnel;这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.为了使用方便,可以对模板类进行一下类型定义,typedef map UDT_MAP_INT_CSTRING...要判定一个数据(关键字)是否在map中出现的方法比较多,这里标题虽然是数据的查找,在这里将穿插着大量的map基本用法。...::pair对象,包括两个数据 iterator->first和 iterator->second分别代表关键字和存储的数据。...第三种:这个方法用来判定数据是否出现,是显得笨了点,但是,我打算在这里讲解lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)upper_bound函数用法,这个函数用来返回要查找关键字的上界

2.7K20

11.1 C++ STL 应用字典与列表

最后,该程序使用迭代器循环遍历map容器,将所有键值对按照key的降序依次输出。该代码的核心功能是创建一个带有某种关键字类型的std::map容器,并实现基本的添加数据和遍历数据的操作。...第一种查找算法,使用find()函数在vector容器中查找特定元素,如果查找成功,则输出元素在容器中的位置(下标)。注意,该函数查找序列中的第一个符合条件的元素。...第二种查找算法,使用find_first_of()函数在两个vector容器之间查找相同元素,如果查找成功,则输出该元素及其位置。...key中的value bool set_dict_value(std::map& ptr, int set_key, int set_value) { ptr[set_key]...需要注意的是,在标准库实现弹出随机数的函数中,随机数生成器需要使用当前的系统时间作为种子,因此可产生结果不同的随机数序列。

22020

STL的使用和背后数据结构

> vec; (3)尾部插入元素,vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl; (5)使用迭代访问元素 1 vector::iterator...如果用前两种方法插入数据,因为关键字是唯一的,所以当关键字已经存在的时候,再插入相同关键字的map是不成功的;而第三种用数组插入的方法是仍然可以的,会将原来的关键字所对应的值进行更改,相当于被覆盖掉了。...4、set:用来存储同一数据类型的数据,内部每个元素都是唯一的,且自动排序;数据结构为红黑树(RB-Tree) (1)构造函数,set c; (2)查找函数,find()函数和count()...总结 6、总结: (1)vector封装数组,list封装链表,map和set封装了二叉树; (2)对于这些STL,应当掌握基本的插入、删除、排序、查找等操作; (3)对于结构体类型的vector、map...、set、hash_map、hash_set等,需要对运算符 ‘ < ’ 进行重载。

70110

【c++】set和map的使用

树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。...set中插入元素时,只需要插入value即可,不需要构造键值对。 set中的元素不可以重复(因此可以使用set进行去重)。...使用set的迭代器遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set查找某个元素,时间复杂度为: log_2 n set中的元素不允许修改 set中的底层使用二叉搜索树(红黑树...如果e作为键在map中还不存在,map会使用默认构造函数创建一个对应的int值(初始值为0),然后执行++操作将其的值增加到1。...(例如使用一个键值对作为参数),它的返回值确实是一个 pair

3800

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

namespace std; int main() { vector arr = { 8,5,6,7,3,1,1,3 }; set s1; //创建一个空的 set set... #include using namespace std; int main() { vector> arr = { make_pair...[i].first); return vs; } }; 注意: 此时使用快排进行排序时,单个元素是 pair,需要自己写出仿函数进行排序,仿函数十分强大 难道基础版快排无法完成任务吗...(小的单词排在前面,就是字典序) 解法二:map + set 同样的,先使用 map 统计单词出现频率,此时已经按照字典序进行了排序,然后将 pair 看作一个 键值 存入 set 中,改变 set...中的比较逻辑(先按出现频率排序,如果相关就按照字典序排序) 整体思路与 map + sort 没啥区别,不过此时是直接使用 set 进行排序,没必要借助 vector //map + set class

24220

c++ list, vector, map, set 区别与用法比较

可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。    优点:(1) 不使用连续内存完成动态操作。                ...;     vector v; 或者连在一起,使用全名: std::vector v; 建议使用全局的命名域方式: using namespace std; 1.vector的声明...默认情况下,优先级队列适配器类使用的是矢量容器vector,当然可以选择指定不同的序列容器作为基础,并选择一个备用函数对象来确定元素的优先级代码如下 priority_queue<int, deque...数据的查找(包括判定这个关键字是否在map中出现) 在这里我们将体会,map在数据插入时保证有序的好处。...要判定一个数据(关键字)是否在map中出现的方法比较多,这里标题虽然是数据的查找,在这里将穿插着大量的map基本用法。

9.9K90

C++map函数的用法_random函数用法

第一个可以称为关键字(key),每个关键字只能在map中出现一次; 第二个可能称为该关键字的值(value); map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。...3,使用map 使用map得包含map类所在的头文件 #include //注意,STL头文件没有扩展名.h map对象是模板类,需要关键字和存储对象两个模板参数: std:map personnel; 这样就定义了一个用int作为索引,并拥有相关联的指向string的指针....为了使用方便,可以对模板类进行一下类型定义, typedef map UDT_MAP_INT_CSTRING; UDT_MAP_INT_CSTRING enumMap; 4,map...本站提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

84810

mapunordered_map基础用法

在map中插入元素的另一种方法是使用成员函数map :: operator []。 在容器内部,map容器按照其比较对象指定的标准,通过键将所有元素进行排序。这些元素总是按照这个顺序插入到相应的位置。...重载[]具体实现如下:(*((this->insert(make_pair(k,mapped_type()))).first)).second 对它进行大致解析后,可将其修改为: template<class...map中存在,还可以用它进行查找操作。...这4个关联式容器与map/multimap/set/multiset功能基本类似,最主要就是底层结构不同,使用场景不容。...无序映射实现直接访问操作符(operator []),该操作符允许使用其键值作为参数直接访问映射值。容器中的迭代器至少是前向迭代器。

2.5K30

【C++】STL 容器 - set 集合容器 ⑥ ( pair 对组简介 | pair 对组元素访问 | set 集合容器 insert 插入结果类型 - pair 对组 )

::set 集合容器 使用 类型中 , 设置 仿函数 排序规则 ; pair 对组 可以将两个值 封装成 一个单元...; std::pair 是 C++ 语言 标准模板库 中的一个模板类 , 该类的主要作用是 将两个 不同类型 或 相同类型 的对象 组合成一个 对组 ; 该 对组 对象 可以作为一个单独的元素进行存储和操作...; std::pair 常常在需要使用两个相关联的值时非常有用 , 比如在关联容器 , 如 : std::map 和 std::set 中 ; 使用 pair 对组前 , 需要先导入 <utility...值的类型为 float ; T1 和 T2 的类型也可以是自定义类型 ; 调用 std::pair 的 .first 值 , 访问对组的第一个值 ; 调用 std::pair 的 .second 值...set 集合容器 中存储两个相关联的值时 , 可以使用 std::pair 对组值 作为 set 集合容器中的元素 ; std::pair 对组是一个模板类 , 用于存储两个可能不同类型的对象作为一对

19110
领券