C++之STL中常用关联容器使用方法

本文介绍了STL中的关联容器set和map的基本概念、内部实现原理及使用方法,包括创建、插入、删除、遍历和查找等功能,并对自定义数据类型的支持进行了详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在STL中常用的关联容器有set和map,其他multiset和multimap是这两个容器的扩展,区别就是打破了键值得唯一性,而在set和map中键值是唯一的,即使插入两个相同键的数据,在容器中也只保留一个。set容器内部只有键值而没有实值(我也不知道为什么还能称之为关联容器),而map里存放着元素是pair<T1,T2>对象。
set和map内部都实现了红黑树的结构就是平衡搜索树。所以它的优势是快速的插入删除、以及查找,其时间复杂度是log2N。

一. set

1.创建对象
set<T1> s;
//对于不是自己定义的数据类型,像int,double等可以不定义比较方式。
set<T,CmpStruct> s;
//自定义比较结构体
set<T,DefineStruct> s;
//自定义数据类型
    //不是自定义的数据类型 ,定义比较结构就行,内部重载()
    //注意不是只定义比较函数,因为set参数是结构体类型 
    struct CmpStruct
    {
        //重载()操作符,结构名+括号就成了函数的形式,好有趣 
        bool operator()(const T1 a, const T2 b)
        {
            return a<b;//从小到大 
        } 
    }
    //对于自定义的数据类型 ,内部要重载<运算符 
    struct DefineStruct
    {
        int id;
        string name;

        bool operator<(const DefineStruct &a)
        {
            return this->id < a.id;
        }
    }

2.插入删除

insert(key):容器内部会根据红黑树的结构插入到相应位置。
erase(key):删除相应键值。

3.遍历

由于内部结构直接遍历(中序遍历)出的就是排序好的数据,这里遍历不像vector,只能使用迭代器。

4.查找

find(key):返回相应地址位置,iterator类型。如果找不到,返回值为s.end()。
set<T> s::iterator it = s.find(key);
    if(it != s.end())
        cout<<"找到了";
    else
        cout<<"没找到"; 

二. map
map的操作和set基本一样,优势同样是快速插入删除,查找。
创建对象时要自定义比较函数的同set
1.插入

insert(pair<T1,T2>(a,b))插入pair对象
map重载了[]操作符,m[key]=new_value;可以实现修改实值得功能,当key不存在与map中时,会创建key并初始化为new_value;
[]还可以用于访问元素,像数组一样。

2.删除
通过key删除数据
erase(key)
3,查找和set也是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值