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