map(multimap)与pair

本文详细介绍了C++标准模板库中的Map容器,包括其内部实现为红黑树、常用操作如insert、erase、find等的时间复杂度,以及如何通过示例代码进行元素的插入、查找和删除。

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

映射和多重映射(map/multimap):

mapmultimap容器类(映射和多重映射):#include

平衡二叉树结构

map的元素是成对pair(key/value) 内部的元素依据其值自动排序。

一个键对应一个值(map)

一个键可以对应多个值(multimap)

 

Map:

 内部实现: pair组成的红黑树o map Data, Compare, Alloc>

insert()O(logn)

erase()O(logn)

find() O(logn)找不到返回a.end()

[key]运算符 O(logn) 

允许重复元素,没有[]运算符

 

Map详解:

map中插入元素

改变map中的条目非常简单, 因为map类已经对[]操作符进行了重载

mapmymap;

mymap['a'] = 1;

mymap['b'] = 2;

或者

mymap.insert( pair('a',1) );

查找并获取map中的元素

获得一个值的最简单方法o intans=mymap[a];

但是,只有当map中有这个键的实例时才会成功, 否则会

 

因此我们可以使用 find()方法来发现一个键是否存在。传入的参数是要查找的key

if(mymap.find(a)==mymap.end()){

//没找到

}else{

//找到insert

}

 

map中删除元素

移除某个map中某个条目用erase() o 该成员方法的定义如下

iterator erase(iterator it); //通过一个条目对象删除

iterator erase(iterator first, iterator last);   //删除一个范围

size_type erase(const Key& key); //通过关键字删除

clear()就相当于 mymap.erase(mymap.begin(), mymap.end());

 

实例:

#include

#include

#include

using namespace std;

int main()

{

    mapmymap;

    map::iterator it;

    mymap.insert(pair('a',1));

    mymap['b']=2;

    mymap['c']=3;

    mymap['d']=4;

    mymap['e']=5;

    it=mymap.find('c');

    mymap.erase(it);

    mymap.erase('d');

    for(it=mymap.begin();it!=mymap.end();it++)

        cout<<(*it).first<<"=>"<<(*it).second<<endl;

    return 0;

}

 

 

二元组pair:

STL头文件中描述了一个看上去非常简单的模板类pair 用来表示一个二元组或元素对, 并提供了按照字典序对元素对进行大小比较的比较运算符模板函数

 例如,想要定义一个对象表示一个平面坐标点,则可以:

pair double> p1;

cin>> p1 .first>> p1 .second;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值