C++中的 map和multimap

本文详细介绍了C++中multimap容器的特性和使用方法,包括元素的插入、查找、删除等操作,以及与map的区别。重点讲解了multimap的内部结构、成员函数和迭代器的使用。

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

multimap是关联容器,每个元素都有 Key 和 Value 两个部分,并且Key可以重复。
如果需要修改关键字Key需要删除再添加。不能直接修改。
容器中的元素是按照Key进行排序的

类模板

容器模板定义如下:

template < class Key, class T, class Pred = less<Key>, class A = allocator<T> >
class multimap
{
    ...
    typedef pair <const Key, T> value_type;
    ...
};

关于Key,T, Pred,A的作用见C++中的 set和multiset
可以看出 multimap 中的元素都是 pair 模板类的对象
multimap 中的 value_type 实际上就表示容器中元素的类型。这是在类的内部重新定义了类型 value_type

要访问multimap每个元素 i->first访问Key,i->second访问Value。i是迭代器。

其他成员函数

成员函数或成员函数模板作 用
iterator find( const Key & val);在容器中查找关键字等于 val 的元素,返回其迭代器;如果找不到,返回 end()
iterator insert (pair <Key, T> const &p);将 pair 对象 p 插入容器中并返回其迭代器
void insert(iterator first, iterator last);将区间 [first, last) 插入容器
int count( const Key & val);统计有多少个元素的关键字和 val 相等
iterator lower_bound( const Key & val);查找一个最大的位置 it,使得 [begin( ), it) 中所有的元素的关键字都比 val 小
iterator upper_bound(const Key & val);查找一个最小的位置 it,使得 [it, end()) 中所有的元素的关键字都比 val 大
pair < iterator, iterator > equal_range (const Key & val);同时求得 lower_bound 和 upper_bound
iterator erase(iterator it);删除 it 指向的元素,返回其后面的元素的迭代器(Visual Studio 2010 中如此,但是在 C++ 标准和 Dev C++ 中,返回值不是这样)
iterator erase(iterator first, iterator last);删除区间 [first, last),返回 last(Visual Studio 2010 中如此,但是在 C++ 标准和 Dev C++ 中,返回值不是这样)

在比较大小时用的是 < 和 > 同时为假,而不是 ==

补充

insert成员函数使用方法:
mp.insert(make_pair(1,"abc")); //使用make_pair()获得 pair
mp.insert(multimap<int,string>::value_type(2,"def")); //使用multimap内部的类型定义一个pair

map

map和multimap的区别就是 map 中的元素Key值不能重复
map 还有一个 T & operator[] (Key k); 成员函数,用来返回 first 的值为 k 的元素的 second 部分的引用。如果没有这样的 first 则添加一个,second部分使用无参构造函数。
使用举例:

string s = mp[2];
cout<<s<<endl;
s = mp.operator[](1);
cout<<s<<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值