当前位置: 代码迷 >> 综合 >> STL之Set、Pair、Map使用
  详细解决方案

STL之Set、Pair、Map使用

热度:91   发布时间:2023-10-22 04:05:11.0

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;//3cout << "set 中的第一个元素是 :" << *s.begin() << endl;//1cout << "set 中的最后一个元素是:" << *(--s.end()) << endl;//3for (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的公有数据成员