STL之Set、Pair、Map使用

STL官方文档:http://www.cplusplus.com/reference/stl/

Map和Mulitmap使用

头文件#include<map>

定义:Map是关联容器,每个元素都是Key:Value为一对的键与健值。

唯一的不同是,map的键值key不可重复,而multimap可以,也正是由于这种区别,map支持[ ]运算符,multimap不支持[ ]运算符。在用法上没什么区别。

定义:

map<key_type,value_type> map_name;

增加元素:

map_name[key]=value;

map_name.insert( pair<key_type,value_type> (key,value ) )

基本操作函数

     begin()         返回指向map头部的迭代器

     clear()        删除所有元素

     count()         返回指定元素出现的次数

     empty()         如果map为空则返回true

     end()           返回指向map末尾的迭代器

     equal_range()   返回特殊条目的迭代器对

     erase()         删除一个元素

     find()          查找一个元素

     get_allocator() 返回map的配置器

     insert()        插入元素

     key_comp()      返回比较元素key的函数

     lower_bound()   返回键值>=给定元素的第一个位置

     max_size()      返回可以容纳的最大元素个数

     rbegin()        返回一个指向map尾部的逆向迭代器

     rend()          返回一个指向map头部的逆向迭代器

     size()          返回map中元素的个数

     swap()           交换两个map

     upper_bound()    返回键值>给定元素的第一个位置

     value_comp()     返回比较元素value的函数

 

补充Set和Pair的使用:

set定义:

set也是关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。set, multiset的区别是:set不允许重复元素,multiset允许重复。

set中常用的方法

begin()   返回set容器第一个元素的迭代器

end()  返回一个指向当前set末尾元素的下一位置的迭代器.

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

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

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

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

rbegin() 返回的值和end()相同

rend() 返回的值和begin()相同

示例:

       set<int> s;
	s.insert(1);
	s.insert(3);
	s.insert(2);
	s.insert(1);
	cout << "set 的 size 值为 :" << s.size() << endl;//3
	cout << "set 中的第一个元素是 :" << *s.begin() << endl;//1
	cout << "set 中的最后一个元素是:" << *(--s.end()) << endl;//3
	for (set<int>::iterator it = s.begin(); it != s.end(); it++)  //使用迭代器进行遍历   
	{
		printf("%d\n", *it);//1\n2\n3\n
	}
	s.clear();
	if (s.empty())
	{
		cout << "set 为空 !!!" << endl;//set 为空 !!!
	}
	cout << "set 的 size 值为 :" << s.size() << endl;//0

Pair定义:

pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl 中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2 个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。

 

其标准库类型--pair类型定义在#include <utility>头文件中,定义如下:

类模板:template<class T1,class T2> struct pair

参数:T1是第一个值的数据类型,T2是第二个值的数据类型。

功能:pair将一对值(T1和T2)组合成一个值,这一对值可以具有不同的数据类型(T1和T2),

        两个值可以分别用pair的两个公有函数first和second访问。

 

构造函数:

pair<Typename1, T2> p1;   默认构造,设置元素类型

pair<T1, T2> p1(v1, v2); 创建一个pair对象,它的两个元素分别是T1和T2类型,其中first 成员初始化为v1,second成员初始化为v2。

make_pair(v1, v2);  以v1和v2的值创建一个新的pair对象,其元素类型分别是v1和v2的类型

 

其他函数:

p1 < p2;  两个pair对象间的小于运算,其定义遵循字典次序:如 p1.first < p2.first 或 者 !(p2.first < p1.first) && (p1.second < p2.second) 则返回true。

p1 == p2;     如果两个对象的first和second依次相等,则这两个对象相等;该运算使用 元素的==操作符。

p1.first;        返回对象p1中名为first的公有数据成员

p1.second;    返回对象p1中名为second的公有数据成员

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值