STL用法总结

一、vector
vector是向量,也是动态数组。顾名思义,vector的性质和数组类似,但是vector的大小可以改变。对于某些问题,若一开始不知道应该定义的数组的大小,可以定一个动态数组,以改变数组大小,防止出现数组访问越界的问题。
数组用来存储字符串的方式是使用字符数组,即char类型的数组,字符数组中的每一个元素都是一个字符,无法同时存储多个字符串,vector动态数组就解决了这个问题。vector定义方法为"vector<date_type>vector_name;",在"<>"中为定义的动态数组类型,可自定义成string类型,即动态数组中每个元素都是一个字符串,可以用来存储多个字符串。
例如:可以用vector动态数组来存储多个不同的单词。
二、set和multiset
set容器类似于一个集合,容器里的元素不能重复,并且在输入后可自动排序。mulitiset和set有些不同,mulitiset里可以存储相同的元素,并且元素也按顺序排列。
可以使用set或mulititiset来讲一串数字,字符及字符串进行排序。若有相同元素,且不要求去重是使用mulitiset;若对需要排序的对象语言去重,则使用set容器。做法是将所有元素输入set(mulitiset)容器中,则就会对各元素进行自动去重和排序(或只排序),然后使用循环将数组按顺序输出即可。
例如:做一个简易字典,输入一些字符串(包含空格、换行等非字母的字符),输出由这些单词并按字典序排列。思路:对于这道题,需要去重,并且排列。首先要将这个字符串中每个单词分离出来,然后将其都存在set容器中,然后通过循环将set中的元素都输出即可。
三、map和multimapmap
定义时包含两个数据类型,可以看成一个数据类型的集合到另一个数据类型的集合的映射,每两个元素都是一对一的关系。
根据map的这种性质,可以用来解决有两个相关变量的问题。
例如:学生的姓名和学号相对应;将学生的姓名和成绩相对应并排序等等。
对于将学生的姓名和成绩联系起来并排序这种题,可以使用一个map容义,“map<string,int>str;”其中string类型的数据表示每个学生的姓名,int类型的数据表示每个每个学生的成绩。则可以定义一个数组,用姓名表示数组的下标,给每个数组元素赋于对应的成绩,格式为a[姓名]=成绩,然后将成绩排列起来。然后根据排序后的数组,将数组的下标和成绩按顺序输出。
四、优先队列
优先队列类似于队列,但是与普通队列不同,优先队列可以自定义排列顺序,称为权值,然后根据权值大小将其排列起来,权值大的在前,排列是树状排列,只能上下交换,不能左右交换。
举个例子:若输入是4,1,7,6,2,5,则输出是7,6,5,1,2,4;若将7删除,则排列顺序则为6,4,5,1,2 。所以可以自定义排列顺序,可以对队列里的数据进行排列,可以控制让最大的数据一定排在队列的最前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值