C++语法基础--关联容器--multimap,multiset

1.multimap,multiset相应的头文件分别是map和set头文件
  *multimap,multiset类型允许一个键对应多个实例
  *multimap,multiset所支持的操作分别和map,set相同,但不支持下标操作符

2.添加元素insert()
  *由于键不要求唯一的,因此每次调用insert总会添加一个元素

3.删除元素erase()
  *带有一个键参数的erase版本将会删除拥有该键的所有元素,并返回删除元素的个数
  *带有一个或一对迭代器参数的版本只删除指定的元素,并返回void类型
  原型:
    void erase (iterator position);
    size_type erase (const key_type& k);
    void erase (iterator first, iterator last);

  
4.在multimap和multiset中查找元素:find(),count(),lower_bound(),upper_bound(),equal_range()
  *关联容器map,set,multimap,multiset的元素是按顺序存储的
  *在multimap,multiset容器中,如果某个键对应多个实例,则这些实例在容器中将相邻存放
   以multimap为例
   原型:
      iterator find (const key_type& k);
     const_iterator find (const key_type& k) const;
     size_type count (const key_type& k) const;


  Examples 2-3:
  int main ()
{
  multimap<char,int> mymultimap;


  // insert some values:
  mymultimap.insert(std::pair<char,int>('a',10));
  mymultimap.insert(std::pair<char,int>('b',20));
  mymultimap.insert(std::pair<char,int>('b',30));
  mymultimap.insert(std::pair<char,int>('c',40));
  mymultimap.insert(std::pair<char,int>('d',50));
  mymultimap.insert(std::pair<char,int>('d',60));
  mymultimap.insert(std::pair<char,int>('e',70));
  mymultimap.insert(std::pair<char,int>('f',80));


  multimap<char,int>::iterator it = mymultimap.find('b');


  mymultimap.erase (it);                    
// erasing by iterator (1 element)


  mymultimap.erase ('d');                    // erasing by key (2 elements)


  it=mymultimap.find ('e');
  mymultimap.erase ( it, mymultimap.end() ); // erasing by range


  // show content:
  for (it=mymultimap.begin(); it!=mymultimap.end(); ++it)
    cout << (*it).first << " => " << (*it).second << '\n';


  return 0;
}
  输出:
  a =>10
  b =>30
  c =>40


  
 *查找相同键的所有元素
  法一:根据如果某个键对应多个实例,则这些实例在容器中将相邻存放
   Examples:
   int main(void)
{
  multimap<char,int> mymm;


  mymm.insert (pair<char,int>('x',10));
  mymm.insert (pair<char,int>('x',20));
  mymm.insert (pair<char,int>('x',30));
  
  multimap<char,int>::size_type entries,cnt;
  entries=mymm.count('x');
  multimap<char,int>::iterator it =mymm.find('x');
  for(cnt=0;cnt!=entries;++cnt,++it)
  {
 cout<<it->second<<'\t';
//10 20 30
  }
  
   return 0;
}


 法二:lower_bound(),upper_bound(),equal_range():
       

  以multimap为例: 

  原型:

             iterator lower_bound (const key_type& k);
  const_iterator lower_bound (const key_type& k) const;
        iterator upper_bound (const key_type& k);
  const_iterator upper_bound (const key_type& k) const;
pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
pair<iterator,iterator>             equal_range (const key_type& k);

  
 
  Examples:根据在同一个键上调用lower_bound,upper_bound,将产生一个迭代器的范围,指示出该键所关联的所有元素
  int main(void)
{
  multimap<char,int> mymm;
  mymm.insert (pair<char,int>('x',10));
  mymm.insert (pair<char,int>('x',20));
  mymm.insert (pair<char,int>('x',30));
  
  multimap<char,int>::iterator beg =mymm.lower_bound('x');
  multimap<char,int>::iterator end =mymm.upper_bound('x');
  for(;beg!=end;++beg)
  {
 cout<<beg->second<<'\t';
//10 20 30
  }
  
   return 0;
}


 Examples:根据equal_range()返回一个迭代器的pair对象
 int main(void)
{
  multimap<char,int> mymm;
  mymm.insert (pair<char,int>('x',10));
  mymm.insert (pair<char,int>('x',20));
  mymm.insert (pair<char,int>('x',30));
  
  typedef multimap<char,int>::iterator myit;
  pair<myit,myit> pos = mymm.equal_range('x');
  for(;pos.first!=pos.second;++pos.first)
  {
 cout<<pos.first->second<<'\t';
//10 20 30
  }
  
   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值