下面介绍一下这四种容器的简单使用。 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值进行排序。
字符串经常被用来作为键,如果想要保存姓名和地址的记录,就可以这么使用。名称通常可能是一个或多个字符串。...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基本用法。
最后,该程序使用迭代器循环遍历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]...需要注意的是,在标准库实现弹出随机数的函数中,随机数生成器需要使用当前的系统时间作为种子,因此可产生结果不同的随机数序列。
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函数用法,这个函数用来返回要查找关键字的上界
> 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等,需要对运算符 ‘ < ’ 进行重载。
set仅包括一个键。并有效的支持关于某个键是否存在的查询。...pair a; //保存两个string pair b; //一个保存string,一个保存int 能够使用make_pair来构建一个pair...#include #include using namespace std; int main() { typedef pair #include #include using namespace std; int...查找与统计map中的元素: 1、使用m.count(k); 统计m中k出现的次数 2、使用m.find(k);查找以k为索引的元素。
#include using namespace std; int main() { pair p1; cout << p1.first <....first << "," << p3.second << endl; //输出 97,98 pair p4 = make_pair(200,"hello");...set 是关联容器的一种,是排序好的集合(元素已经进行了排序)。set 和 multiset 类似,它和 multiset 的差别在于 set 中不能有重复的元素。...(去重) #include #include //使用set须包含此文件 using namespace std; int main() { typedef...#include #include //使用stack需要包含此头文件 using namespace std; int main() { int n,
树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。...set中插入元素时,只需要插入value即可,不需要构造键值对。 set中的元素不可以重复(因此可以使用set进行去重)。...使用set的迭代器遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set中查找某个元素,时间复杂度为: log_2 n set中的元素不允许修改 set中的底层使用二叉搜索树(红黑树...如果e作为键在map中还不存在,map会使用默认构造函数创建一个对应的int值(初始值为0),然后执行++操作将其的值增加到1。...(例如使用一个键值对作为参数),它的返回值确实是一个 pair。
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
可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。 优点:(1) 不使用连续内存完成动态操作。 ...; vector v; 或者连在一起,使用全名: std::vector v; 建议使用全局的命名域方式: using namespace std; 1.vector的声明...默认情况下,优先级队列适配器类使用的是矢量容器vector,当然可以选择指定不同的序列容器作为基础,并选择一个备用函数对象来确定元素的优先级代码如下 priority_queue<int, deque...数据的查找(包括判定这个关键字是否在map中出现) 在这里我们将体会,map在数据插入时保证有序的好处。...要判定一个数据(关键字)是否在map中出现的方法比较多,这里标题虽然是数据的查找,在这里将穿插着大量的map基本用法。
一个 std::pair 有两个公有成员:first 和 second,分别表示键和值==(firstkey ; secondvalue)== STL中关于键值对的定义: template...初始化构造函数: pair (const first_type& a, const second_type& b); 初始化构造函数接受两个参数 a 和 b,分别用于初始化 std::pair 对象的...<< p3.first << " " << p3.second << endl; } int main() { test_pair(); return 0; } 2.3make_pair() 函数和使用...{} -简化创建过程 void test_pair2() { auto p4 = make_pair(2, 'c');//使用make_pair pair p5 = { 3,...<< endl; } int main() { test_pair2(); return 0; } 我们能使用{}(初始化列表),是因为:构造函数匹配。
map Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力。...删除 erase 根据key删除 使用迭代器删除,遵循前闭后开原则 查找 find,返回iterator。...查找成功则返回对应元素的迭代器,查找失败则等于end() #include "stdafx.h" #include "iostream" using namespace std; #include "map...(pair(3, "c")); nameMap.insert(pair(2, "b")); print(nameMap); cout...,其重要差别在于重复键,设计和使用要区别对待。
> sssssp;//假设使用stringPtrLessSS作为比较函数,这都不能编译!!!!!!...// DereferenceLess 适合作为 T* 的关联容器,也可以作为T对象的迭代器和智能指针的比较类型 条款18:永远让比较函数对相等的值返回false //1 std::set m; m.insert(std::pair(10,"liii")); // m.begin()->first...设计成 pair可变的就行 //必须做的另外一件事是,写一个自定义的比较函数,排序的比较函数,还需要一个比较函数进行查找 //排序的比较函数作用于两个pair对象,查找的比较函数用到key,必须传给用于查找的比较函数一个...> vd.push_back(std::pair("lyy",10)); vd.push_back(std::pair<std::string ,int
第一个可以称为关键字(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...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
namespace std; int main() { const size_t N = 100000; unordered_setarr1; setarr2; vector...namespace std; int main() { const size_t N = 100000; unordered_setarr1; setarr2; vector...namespace std; int main() { const size_t N = 1000000; unordered_setarr1; setarr2; vector...总结:对于查找来说,unordered系列的查找是最快的。 底层结构 unordered系列的关联式容器之所以效率比较高,是因为其底层使用了哈希结构。...例如: 假设要存储某家公司员工登记表,如果用手机号作为关键字,那么极有可能前7位都是 相同 的,那么我们可以选择后面的四位作为散列地址,如果这样的抽取工作还容易出现 冲突,还 可以对抽取出来的数字进行反转
, 需要在前一个位置, 添加关键字。...sizeFilter _Myt; /* 在模板(template)中使用一个嵌套从属类型名称, 需要在前一个位置, 添加关键字。...0) { return true; } return false; } //set容器自动排序,默认升序排列,第一个为min,最后一个为max std::pair<value_type...; return ret; } std::pair getMax()//获取最大值 { std::pairret;...> using namespace std; int main(void) { sizeFilter sf; //插入 sf.insert(5); pair<sizeFilter<
在map中插入元素的另一种方法是使用成员函数map :: operator []。 在容器内部,map容器按照其比较对象指定的标准,通过键将所有元素进行排序。这些元素总是按照这个顺序插入到相应的位置。...重载[]具体实现如下:(*((this->insert(make_pair(k,mapped_type()))).first)).second 对它进行大致解析后,可将其修改为: template<class...map中存在,还可以用它进行查找操作。...这4个关联式容器与map/multimap/set/multiset功能基本类似,最主要就是底层结构不同,使用场景不容。...无序映射实现直接访问操作符(operator []),该操作符允许使用其键值作为参数直接访问映射值。容器中的迭代器至少是前向迭代器。
; T1 first; T2 second; pair() : first(T1()), second(T2()) {} pair(const T1& a, const T2& b) : first...> using namespace std; int main() { settree; tree.insert(1); tree.insert(3); tree.insert(9)...> using namespace std; int main() { multisettree; tree.insert(1); tree.insert(3); tree.insert...#include #include using namespace std; int main() { multisettree; tree.insert(...(要小心,如果一个值没有,会进行插入的操作) #include #include using namespace std; int main() { map<string
::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 对组是一个模板类 , 用于存储两个可能不同类型的对象作为一对
领取专属 10元无门槛券
手把手带您无忧上云