STL 之 vector、map、set 的基本用法

【vector】

一个vector类似一个动态的一维数组。

vector中可以存在重复的元素。

vector <数据类型> a; 

vector <int> a(100,0)  //声明了一个已经存放了100个0的整型vector

头文件:#include<vector>

【常用函数】

1.a.size()  //返回元素个数

2.a.push_back()  //在末尾压入元素

3.a.pop_back()  //删除最后一个元素

4.a.back()  //返回最后一个元素

5.a.clear()  //清空vector

6.a.empty()  //判断是否为空

7.a.begin()  //得到数组头的指针

8.a.end()  //得到数组最后一个单元的引用

9.a.erase()  //删除指针指向的数据项

10.a.swap()  //与另一个vector交换数据

【map】

map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它在我们处理一对一数据的时候,在编程上提供快速通道。map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能。

下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可以轻易描述,很明显学号用int描述,姓名用字符串描述。

【数据的插入】

1.mapStudent.insert(pair<int, string>(1, "student_one")); 

2.mapStudent.insert(map<int, string>::value_type (1, "student_one")); 

3.mapStudent[1] =  "student_one";  

【数据的查找】

第一种:用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,如果出现就返回1。

第二种:用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

第三种:

Lower_bound函数用法,这个函数用来返回要查找关键字的下界(返回>=的第一个数据)

Upper_bound函数用法,这个函数用来返回要查找关键字的上界(返回>的第一个数据)

例如:map中已经插入了1,2,3,4的话,如果lower_bound(2)的话,返回的2,而upper-bound(2)的话,返回的就是3

Equal_range函数返回一个pair,pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明map中不出现这个关键字。

【数据的清空与判空】

清空map中的数据可以用clear()函数,判定map中是否有数据可以用empty()函数,它返回true则说明为空。

【数据的删除】

这里要用到erase函数,它有三个重载了的函数,下面在例子中详细说明它们的用法。

#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
       map <int,string> mp;
       mp.insert(pair <int,string> (1, "student_one"));
       mp.insert(pair <int,string> (2, "student_two"));
       mp.insert(pair <int,string> (3, "student_three"));
       map<int, string>::iterator iter;
       iter = mp.find(1);
       mp.erase(iter);  //用迭代器删除
       mp.erase(1);  //用关键字删除
       mp.erase(mp.begin(), mp.end());  //删除区间是一个前闭后开的集合
}

【set】

set中不会包含重复的元素。

set的含义是集合,是一个有序的容器,支持插入、删除、查找等操作,效率非常高。

set <int> a;

【基本操作】

a.begin()  //返回set容器的第一个元素 

a.end()  //返回set容器的最后一个元素 

a.clear()  //删除set容器中的所有的元素 

a.empty()  //判断set容器是否为空 

a.insert()  //在集合中插入元素

a.count()  //返回某个值元素的个数

a.max_size()  //返回set容器可能包含的元素最大个数 

a.size()  //返回当前set容器中的元素个数

a.find()  //若找到则返回给定值位置,若没有找到就返回a.end()

a.erase()  //删除指针指向的数据项

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值