STL模板—map set pair

一. map/multimap

1.定义:map中所有元素都是pair,第一个元素为键值key,第二个元素为实值value,所有元素根据键值自动排序,属于关联容器,底层结构二叉树

2.头文件:#include<map>

3.用法:

map<typename1,typename2> mp; // 定义mp,typename1为键key即映射前的类型,typename2为值value即映射后的类型。

map<int,int> mp;

mp.insert(pair<int,int>(10,20)); //插入

mp.insert(m_pair(2,10));

mp.insert(map<int,int>::value_type(3,10));

mp[4]=40;  //不建议[]插入,可以用key访问value

map<int,int> mp1(mp); //拷贝构造

map<int,int> mp2=mp1; //赋值

mp.size();  //返回mp大小

mp.empty(); //返回mp是否为空

swap(mp1,mp2); //交换mp1和mp2

mp.earse(pos); //删除pos迭代器位置

mp.earse(elem); //删除key值为elem

mp.earse(mp.begin(),mp.end()); //清空

mp.clear(); //清空

mp.find(key); 若存在遍历键值若key存在则返回迭代器否则返回mp.end()

mp.count(key);计算key的数目

map排序

默认按key值从小到大,其他排序需利用仿函数指定规则

class MyCompare
{
  public:
        bool operator()(int v1,int v2){
         return v1>v2;
        }
};
map<int,int,MyCompare> mp;

4.map和multimap区别: map不允许重复键值key,存在而multimap允许重复键值key存在

二. set/multiset

1.定义:所有元素插入时自动排序,本质关联容器,底层结构二叉树。

2.头文件: #include<set> 包括set和multiset

3.用法:

set<int> s1;

//插入数据只有insert方式,不许插入重复值

s1.insert(10); //不可指定插入位置,因为set自动排序

set<int> s2(s1); //拷贝构造

set<int> s3=s2; //赋值

s1.size(); //set的大小

s1.empty() //是否为空

swap(s1,s2); //交换s1,s2

s1.earse(s1.begin(),s1.end()); //清除所有元素

s1.clear();  //清空所有元素

s1.earse(elem); //删除指定元素

earse(s1.begin()); //删除首

s1.find(key); //若找到返回迭代器,否则返回s1.end()

s1.count(key); //统计key的元素个数

利用仿函数改变排序规则

class MyCompare
{
public:
    bool operator()(int v1,int v2){
        return v1>v2;
     }
};
set<int,MyCompare> s1;
for(int i=0;i<n;i++){ 
   cin>>n;
   s1.insert(n);
}
for(set<int,MyCompare>::iterator it;it<s.end();it++){
    cout>>*it>>" ";}

自定义数据类型,指定排序规则

class Person
{
 public:
        Person(string name,int age){
        this->m_name=name;
        this->m-age=age;
        } 
        string m_name;
        int m_ag;
};
class MyCompare
{
   public:
          bool operator()(const Person &p1,const Person &p2){
           return p1.m_age<p2.m_age;
          }
};
set<Person,MyCompare> pset;

 

4. set和multiset区别:set不允许插入重复数据而multiset允许插入重复数据。

三. pair

1.定义:成对出现的数据,利用对组可以返回两个数据

//创建

pair<string,int> person("Tom",12);

pair<string,int> p=make_pair("Tony",14);

p.first 访问第一个数据

p.second 访问第二个数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值