非线性容器(set与map)总结

本文介绍了C++STL中的set容器,包括插入、删除数据及其他操作。同时,讲解了pair的概念以及set的自定义排序。此外,还提到了multiset允许相同键值存在的情况。对于map容器,讨论了其与set的区别以及插入、删除和查看数据的方法,并提及multimap作为允许键值共存的map变体。
摘要由CSDN通过智能技术生成

包含头文件#include<set>

set<int>v;

一、pair(对组)的介绍

pair<int, string>p = { 10,"adj" };//可以理解为一个结构体,里面有两数据(自己定义)

里面有什么?

        1.p.first=10;

        2.p.second=adj;

        3.重载=

        4.swap函数

二、set容器

set容器与vector等容器不同,它有只有键值,插入数据是按照键值来排序的

注意set数据不会重复,如果插相同的插不了,当然也不会报错

1.插入数据

        (1)v.insert(1);//插入1;

        (2)v.emplace(1);//插入1

2.删除数据

        (1)v.erase(3);//删除3

3.其他操作

        (1)v.clear()//删除全部数据

        (2)v.size()// 返回容器大小

        (3)v.count(val)//返回val数据的数量

        (4)v.empty()//返回是否空

        (5)v.find(val)//返回第一个val的迭代器,否则返回end()一样的

        (6)v.lower_bound(val)//返回第一个比val小的

        (7)v.upper_bound(val)

        (8)提供一个网站了解详细

C++ STL set容器完全攻略(超级详细) (biancheng.net)

遍历容器

for (set<string>::iterator it = p.begin(); it != p.end(); ++it)
    {
        cout << *it << " ";//好像全部都这样写啊
    }

如何自定义set排序?

在定义的时候就写好规则(比如从大到小)

  set<string,greater<string>>p;

三、multiset容器

与set几乎没有区别,头文件也是<set>,只是这个允许相同的键值共存

四、map容器

map与set不同的是:map除了键值还有一个数据。

了解详细可以看

C++ STL map容器详解 (biancheng.net)

C++中map的用法总结 - 知乎 (zhihu.com)

1.插入数据

       (1)v.insert(pair<int,string>(3,"333"));

         (2)  v.insert(make_pair(3,"333"));

        (3).v.insert(map<int,string>::value_type(3,"333"));

        (4)v[3]="333";

        (5)v.emplace()

第4种最简单,但是可能会出现一点小问题,要用另外3种

2.删除数据

//迭代器刪除
it = maps.find("123");
maps.erase(it);

//关键字删除
int n = maps.erase("123"); //如果刪除了返回1,否则返回0

//用迭代器范围刪除 : 把整个map清空
maps.erase(maps.begin(), maps.end());
//等同于mapStudent.clear()

3.查看数据

        (1)我们经常直接用v[key]来查看

        (2)v.at(key);

3.其他操作

        (1)v.clear()//删除全部数据

        (2)v.size()// 返回容器大小

        (3)v.count(val)//返回val数据的数量

        (4)v.empty()//返回是否空

        (5)v.find(val)//返回第一个val的迭代器,否则返回end()一样的

        (6)v.lower_bound(val)//返回第一个比val小的

        (7)v.upper_bound(val)

遍历容器

//迭代
map< string,int>::iterator it;
for(it = maps.begin(); it != maps.end(); it++)
    cout<<it->first<<" "<<itr->second<<endl;//输出key 和value值

如何自定义set排序?

在定义的时候就写好规则(比如从大到小)

五、multimap容器

与map几乎没有区别,头文件也是<map>,只是这个允许相同的键值共存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值