多重集合(multiset)和多重映射(multimap)

首先看关联容器分类:
在这里插入图片描述
多重集合是允许有重复元素的集合,多重映射是允许一个键对应多个数据的映射。
示例代码:
#include
#include
#include
#include
using namespace std;
int main()
{
multimap<string, string>courses;//定义多重映射
typedef multimap<string, string>::iterator Courseiteral;
courses.insert(make_pair(“C++”, “2-6”));
courses.insert(make_pair(“COMPILER”, “3-1”));
courses.insert(make_pair(“COMPILER”, “3-2”));
courses.insert(make_pair(“COMPILER”, “2-7”));
courses.insert(make_pair(“Qt”, “1-1”));
courses.insert(make_pair(“OS”, “4-2”));
string name;
int num;
do {
cin >> name;
num = courses.count(name);
if (num == 0)
cout << name << " don’t in courses" << endl;
} while (num == 0);
cout << num << " per week!" << endl;
pair<Courseiteral, Courseiteral>range;
range = courses.equal_range(name);
for (Courseiteral iter = range.first;
iter != range.second;
iter++)
{
cout << iter->second;
}
cout << endl;

system("pause");
return 0;

}
重点:
typedef multimap<string, string>::iterator Courseiteral;此处定义了多重映射的迭代器。

STL中的equal_range算法返回一个pair类型的值range,
vector vec;
…//vec initialize
pair<vector::iterator,vector::iterator> range;
range = equal_range(vec.begin(),vec.end(),value);
其中range.first是可以在不改变原来排序顺序的情况下的可以插入value的最小迭代器位置,
range.second是不改变原来排序顺序的情况下的可以插入value的最大迭代器位置.
实际情况是:如果vec中存在value,那么range.first就是vec中的指向第一个value位置的迭代器,而range.second则是vec中指向第一个大于value的值的位置的迭代器.
如果搜索值在容器中是最后一个值那么range.second就是container.end().当vec中没有value时,range返回一个0区间,
也就是range.first=range.second=指向vec中第一个值大于value的位置的迭代器(可能为vec.end,如果vec中所有值均小于value)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值