[ C++ ] STL---map与set的使用指南

慈云数据 1年前 (2024-04-10) 技术支持 57 0

目录

关联式容器

键值对

set简介

set的常用接口

构造函数

set的迭代器

set的容量

修改相关接口

find()函数

insert()函数

erase()函数

clear()函数

count函数

lower_bound()函数

upper_bound()函数

multiset简介

map简介

map的常用接口

构造函数

map的迭代器

map的容量

修改相关接口

insert()函数

1. 有名对象构造pair

2. 匿名对象构造pair

3. make_pair()函数构造pair

4.{ }构造

示例:

元素访问operator[ ]

示例

multimap简介


关联式容器

STL中的部分容器vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身;

关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高;

键值对

键值对是表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key相对应的信息;

//键值对
template 
struct pair
{
	T1 first;//key
	T2 second;//value
	//键值对构造函数
	pair()
		:first(T1())
		, second(T2())
	{}
	//键值对拷贝构造函数
	pair(const T1& a, const T2& b)
		:first(a)
		, second(b)
	{}
};

set简介

  • set是按照一定次序存储元素的容器并且set中的元素不可以重复;
  • set中只存放value,但set底层实际存放由所构成的键值对,元素的value也标识它(value即为key,类型为T),并且每个value必须是唯一的;set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除元素;
  • 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序;
  • set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代;
  • set在底层是用二叉搜索树(红黑树)实现的;

    set官方文档:set - C++ Reference

    set的常用接口

    构造函数

    //无参构造: set s1
    set();
    //迭代器区间构造[begin,end): set s2(s1.begin,s1.end)
    template 
    set(InputIterator first, InputIterator last);
    //拷贝构造: set s3(s1)
    set(const set& x);
    

    set的迭代器

    set的容量

    修改相关接口

    find()函数

    若在set容器中查找到值为val的元素,则返回val元素所在的位置;

    若在set容器中查找不到值为val的元素,则返回set容器中最后一个元素的下一个位置;

    insert()函数

    pair insert (const value_type& val);

    在set容器中插入元素val,若元素插入成功,返回;

    若插入元素失败,说明val已存在于set容器中,返回;

    iterator insert (iterator position, const value_type& val);

    在set容器中的pos位置插入元素val,插入成功返回新插入元素val在set中的位置,插入失败返回已存在的元素val在set中的位置;一般配合find()函数使用;

    int main()
    {
    	set s1;
    	s1.insert(5);
    	s1.insert(4);
    	s1.insert(3);
    	s1.insert(6);
    	s1.insert(7);
    	s1.insert(1);
    	s1.insert(5);
    	set::iterator it = s1.begin();
    	while (it != s1.end())
    	{
    		cout 
微信扫一扫加客服

微信扫一扫加客服