【学习笔记】multiset+multimap之equal_range、upper_bound、lower_bound、count

本文深入解析C++ STL中的multiset和multimap容器特性,介绍其允许元素重复与相同键值对应不同值的特点,以及如何进行遍历、查找、计数等操作。通过具体代码示例,展示equal_range、upper_bound、lower_bound和count等函数的使用方法。
摘要由CSDN通过智能技术生成

multiset:


multiset中允许排序后用重复的元素,不去重

multiset<int> a;
a.insert(1);
a.insert(2);
a.insert(3);
a.insert(1);
a.insert(2);
a.insert(2);

遍历:begin()和end()


multiset<int>::iterator it;
for(it=a.begin();it!=a.end();it++)
        cout<<*it<<" ";

输出:1 1 2 2 2 3

equal_range(x):一种二分查找算法,返回两个迭代器first和second,即first=lower_bound(x),second=upper_bound(x)

auto m=a.equal_range(1);
for(it=m.first;it!=m.second;it++)//注意second和first
     cout<<*it<<" ";

输出:1 1

upper_bound(x)+lower_bound(x):返回第一个大于x的迭代器+返回第一个大于等于x的迭代器

multiset<int>::iterator it,beg,end;
beg=a.lower_bound(1);
end=a.upper_bound(1);
for(it=beg;it!=end;it++)
     cout<<*it<<" ";

输出:1 1 

count(x):返回x出现的次数

    cout<<a.count(2)<<endl;

输出:3

 

multimap:


multimap<key,val> m;中允许同一个key值对应多个不同的val值,且会以key值大小自动排序

multimap<char,int> m;
m.insert(make_pair('a',1));
m.insert(make_pair('b',5));
m.insert(make_pair('a',2));
m.insert(make_pair('c',3));
m.insert(make_pair('c',2));
m.insert(make_pair('c',1));

遍历:

multimap<char,int>::iterator it;
for(it=m.begin();it!=m.end();it++)
  cout<<it->first<<" "<<it->second<<endl;

输出:

a 1
a 2
b 5
c 3
c 2
c 1

equal_range(x):

multimap<char,int>::iterator it;
auto f=m.equal_range('c');
for(it=f.first;it!=f.second;it++)
     cout<<it->second<<" ";

输出:3 2 1 //注:multimap只对key排序了,但value还是插入的顺序

upper_bound(x)+lower_bound(x):

multimap<char,int>::iterator it,beg,end;
beg=m.lower_bound('c');
end=m.upper_bound('c');
for(it=beg;it!=end;it++)
   cout<<it->second<<" ";

输出:3 2 1

count(x):x指key值

cout<<m.count('c');

输出:3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值