07~关联容器简介

前言:
vector list deque通常是使用数组或者链表的物理形式实现
关联容器通常是以树的形式实现,STL提供了4中关联容器:set multiset map multimap

1. set

set的key类型和val类型必须相同(否则编译失败),并且在一个容器中key是唯一的

// set::rbegin/rend
#include <iostream>
#include <set>

int main ()
{
  int myints[] = {21,64,17,78,49};
  std::set<int> myset (myints,myints+5);

  std::set<int>::reverse_iterator rit;

  std::cout << "myset contains:";
  for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
    std::cout << ' ' << *rit;

  std::cout << '\n';

  return 0;
}

输出:myset contains: 78 64 49 21 17

// set::rbegin/rend
#include <iostream>
#include <set>

int main ()
{
  int myints[] = {21,21,17,78,49};
  std::set<int> myset (myints,myints+5);

  std::set<int>::reverse_iterator rit;

  std::cout << "myset contains:";
  for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
    std::cout << ' ' << *rit;

  std::cout << '\n';

  return 0;
}

输出:
myset contains: 78 49 21 17

2. multiset

multiset 和 set的区别是 multiset的key可以重复

// multiset::begin/end
#include <iostream>
#include <set>

int main ()
{
  int myints[] = {42,71,71,71,12};
  std::multiset<int> mymultiset (myints,myints+5);

  std::multiset<int>::iterator it;

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

  std::cout << '\n';

  return 0;
}

输出:
mymultiset contains: 12 42 71 71 71

3. map

map的key和val类型不同,并且key是唯一的!

// map::begin/end
#include <iostream>
#include <map>

int main ()
{
  std::map<char,int> mymap;

  mymap['b'] = 100;
  mymap['a'] = 200;
  mymap['c'] = 300;

  // show content:
  for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';

  return 0;
}

输出:
a => 200
b => 100
c => 300

// map::begin/end
#include <iostream>
#include <map>

int main ()
{
  std::map<char,int> mymap;

  mymap['b'] = 100;
  mymap['a'] = 200;
  mymap['b'] = 200;

  // show content:
  for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
    std::cout << it->first << " => " << it->second << '\n';

  return 0;
}

输出:
a => 200
b => 300

4. multimap

multimap和map不同点在于key可以重复

// multimap::begin/end
#include <iostream>
#include <map>

int main ()
{
  std::multimap<char,int> mymultimap;

  mymultimap.insert (std::pair<char,int>('a',10));
  mymultimap.insert (std::pair<char,int>('b',20));
  mymultimap.insert (std::pair<char,int>('b',150));

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

  return 0;
}

5. 参考链接

转载01:
https://www.cnblogs.com/winslam/p/8975139.html
转载02:
https://www.cnblogs.com/LearningTheLoad/p/7466057.html
转载03:
http://www.cplusplus.com/reference/map/multimap/?kw=multimap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值