关联容器Map

映射容器map是一种关联容器,表示的是对偶(键,值)的序列。它支持唯一Key类型的键值,并提供对另一个基于键的类型T的快速检索。map还提供双向迭代器。映射容器map在标准C++中,对应于map类,被定义在<map>头文件中。

映射:键→值,值 = 映射[键](似f:x → y,y = f(x))。即,可以通过映射,由键来快速定位值。

For Example:

Part of the code:

typedef std::map<char, CBitmapButtonEx* >KeyMap;
typedef std::map<char, CBitmapButtonEx* >::iteratorKeyMapIter;


private:


KeyMap mKeyMap;

void CSTKeyboard::InitMap()
{
mKeyMap[ 'A' ] = &m_btnAT;
mKeyMap[ 'B' ] = &m_btnBT;
mKeyMap[ 'C' ] = &m_btnCT;
mKeyMap[ 'D' ] = &m_btnDT;
mKeyMap[ 'E' ] = &m_btnET;
mKeyMap[ 'F' ] = &m_btnFT;
mKeyMap[ 'G' ] = &m_btnGT;
mKeyMap[ 'H' ] = &m_btnHT;
mKeyMap[ 'I' ] = &m_btnIT;
mKeyMap[ 'J' ] = &m_btnJT;
mKeyMap[ 'K' ] = &m_btnKT;
mKeyMap[ 'L' ] = &m_btnLT;
mKeyMap[ 'M' ] = &m_btnMT;
mKeyMap[ 'N' ] = &m_btnNT;

}


void CSTKeyboard::HideAllBtn()
{
for ( KeyMapIter pIter = mKeyMap.begin(); pIter != mKeyMap.end(); ++pIter )
{
if ( pIter->second )
{
pIter->second->ShowWindow( FALSE );
}
}
}





为了显示映射的威力,我们举一个单词计数程序的例子:(此处的单词是以白空符分隔的广义字符串

完整代码:

#include < iostream >

#include < fstream >

#include < map >

#include < string >

using namespace std ;

 

int main ( int argc , char* argv [ ] ) {

  typedef map < string , int > WordMap ; // 定义特定的单词映射类型

  typedef WordMap :: iterator wmIter ; // 定义该类型的迭代器

  const char* fname = "WordCount.cpp" ; // 缺省文件名串

 

  if ( argc > 1 ) fname = argv [ 1 ] ; // 读入命令行的第一个参数,作为文件名路径串

  ifstream in ( fname ) ; // 打开文件输入流

  if ( ! in ) { // 如果打开错误,则显示提示信息后退出

       cout << " Open file " << fname << " error ! " << endl ;

       return 1 ;

  }

  WordMap wordmap ; // 定义单词映射对象

  string word ; // 定义单词字符串对象

  while ( in >> word ) wordmap [ word ] ++ ; // 从文件中读入单词,

// 在wordmap [ word ]第一次出现时,

// 将单词word与其映射值wordmap之对偶元素(word,wordmap)

// 加入容器,并将映射wordmap的值加一(初值为0)。

  // 遍历容器,显示输出计数大于等于3的单词和计数

  for ( wmIter w = wordmap . begin ( ) ; w != wordmap . end ( ) ; w ++ )

    if ( w->second >= 3 ) cout << w->first << " : " << w->second << endl ;

  // 显示单词串“wordmap”的计数值

  // cout << " wordmap : " << wordmap [ "wordmap" ] << endl ;

  return 0 ;

}

此例中,“值 = 映射[键]”对应于“计数 = 映射[单词]”,即“count = wordmap [ word ]”。因为map容器中的内容是按键从小到大顺序排列的,所以在wordmap容器中的映射元素(即键值对<word, count>)是按单词的ASCII码字典顺序排列的。

程序中的 wordmap[word]++ ; 对(将int与word关联在一起的映射值)表达式进行增1操作。如果映射中没有单词word,则作为该单词的键-值对(此时的值被初始化为0),就会被自动加入到映射中(这是map容器所具有的零初始化能力);如果word已经在映射中,则该表达式会将键所对应的值加1。

你也可以用下面的语句,来单独显示某个单词键(例如单词字符串“wordmap”)的计数值:

cout << " wordmap : " << wordmap [ "wordmap" ] << endl ;

运行结果:

https://p-blog.csdn.net/images/p_blog_csdn_net/touzani/303255/o_map.jpg 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值