Map使用之关联数组

来源:互联网 发布:欧美流行歌手知乎 编辑:程序博客网 时间:2024/06/05 18:06

背景:在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 containerStringFloatMap stocks;// insert some elementsstocks["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 elementsStringFloatMap::iterator pos;for(pos = stocks.begin(); pos != stocks.end(); ++pos){cout << "stock:" << pos->first << "\t"<< "price:" << pos->second << endl;}cout << endl;// all stocks doubledfor(pos = stocks.begin(); pos != stocks.end(); ++pos){pos->second *= 2;}// print all elementsfor(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 elementsfor(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。



原创粉丝点击