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