Map使用之关联数组

背景:在C++ Standard Library中,Map容器使用pair(Key/Value)存储元素,而且不允许重复元素。如果给定一个Key,存在着唯一的对应的Value,Key与Value存在着某种关联,由此,可将Map作为关联数组使用。


现举例如下

Test OS: Windows 7

Test IDE: Visual Studio 2005

Code Example:

#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	/* Create map / associative map
	 * - keys are strings
	 * - values are float
	 */
	typedef map<string, float> StringFloatMap;
	
	// create empty container
	StringFloatMap stocks;
	// insert some elements
	stocks["TXKG"] = 276.50;
	stocks["GOOG"] = 700.34;
	stocks["AAPL"] = 498.26;
	stocks["BMW"] = 823.23;
	stocks["NONE"] = 0.72;
	stocks["NOKIA"] = 12.25;

	// print all elements
	StringFloatMap::iterator pos;
	for(pos = stocks.begin(); pos != stocks.end(); ++pos)
	{
		cout << "stock:" << pos->first << "\t"
			<< "price:" << pos->second << endl;
	}
	cout << endl;

	// all stocks doubled
	for(pos = stocks.begin(); pos != stocks.end(); ++pos)
	{
		pos->second *= 2;
	}

	// print all elements
	for(pos = stocks.begin(); pos != stocks.end(); ++pos)
	{
		cout << "stock:" << pos->first << "\t"
			<< "price:" << pos->second << endl;
	}
	cout << endl;

	// rename key from "AAPL" to "APPLE"
	stocks["APPLE"] = stocks["AAPL"];
	stocks.erase("AAPL");

	// print all elements
	for(pos = stocks.begin(); pos != stocks.end(); ++pos)
	{
		cout << "stock:" << pos->first << "\t"
			<< "price:" << pos->second << endl;
	}
	cout << endl;

	system("pause");
	return 0;
}

Test Result as follow:



可见,使用pair第一元素类型作为下标,寻址到该Key对应的Value的引用,可以很方便地操纵元素。

这里需要注意:

当使用Key作为下标时,如果Map中已经存在该元素,则返回该元素Value的引用,如果不存在,则会插入一个以下标为Key的元素,并使用Value对应数据类型的Default构造函数初始化Value。即上例中中如果使用语句stocks["abcd"]  = 5.0,则插入Key为“abcd”的元素,并以float 0 初始化,紧接着,将该元素的Value赋值为5.0。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值