STL之Map使用小结
2013-09-16 21:00
423 查看
/*
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
快速插入Key - Value 记录。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
快速删除记录
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
根据Key 修改value记录。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
遍历所有记录。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
MAP的插入方式跟别的容器有所不同:除数组形式插入方式外,插入元素时,如果key值相同,则不做插入动作,
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//建议:特殊元素的插入前先遍历是否存在,若存在则将其删除后再插入
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <map>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <string>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void printMap( map<const char*, double> &m)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double>::iterator iter;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for (iter = m.begin(); iter !=m.end(); iter++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<iter->first<<": "<<iter->second<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void main()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bool bRet = false;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
string str;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//创建map对象
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//创建一个没有任何元素的map对象m,元素的键值类型是char,映照数据类型为int,键值的比较函数对象为greater<char>
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<char, int, greater<char> > m1;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//创建一个map对象m2,元素的键值类型为const char*, 映照数据类型为int, 键值的比较函数对象为strLess
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//map<const char *, int> m(strLess());
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double> m2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double> m3(m2); //用一个map容器的元素和比较函数拷贝生成一个新的map容器对象
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
pair<const char*, double> p1("a",3.6);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
pair<const char*, double> p2("b", 3.2);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
pair<const char*, double> pairArray[] =
![](http://www.cppblog.com/Images/dot.gif)
{p1,p2};
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double> m4(pairArray, pairArray+2); //拷贝迭代区间[first, last)所指的数据,创建一个map对象
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"printMap(m4): "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素插入 1-value-type (该方法又细分为4种: value_type, pair, make_pair, 下标方式)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"m4.insert( map<const char*, double>::value_type(\"c\", 1.8) ) = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bRet = m4.insert( map<const char*, double>::value_type("c", 1.8) ) .second;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (bRet)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"OOOOK!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"FFFFailed!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.insert( pair<const char*, double>(\"d\", 2.3) ) = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str = (m4.insert( pair<const char*, double>("d", 2.3) )).second ? string("OK") : string("Failed!!");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<str<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.insert( make_pair(\"e\", 6.3) ) = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//m4.insert( map<const char*, double>::value_type("e", 6.3) );
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str = (m4.insert( make_pair("e", 6.3) ) ).second ? string("OK") : string("Failed!!");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<str<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.insert(make_pair(\"e\", 10.2) ) : \nin this way, reinsert the same elem will failed "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str= ( (m4.insert(make_pair("e", 10.2))).second ) ? string("OK") : string("Failed!!");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<str<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4[\"e\"] = 10.2 will OK, \nbut maybe low-level efficiency, and dont return ture/false."<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m4["e"] = 10.2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素插入:2-在某位置前插入 insert(&pos, elem)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素插入:3-迭代区间的插入 insert(&first, &last)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//略
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素删除 键值删除用size_type erase(elem), 迭代器位置上的元素删除用void erase(&pos);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//迭代区间[&first, &last)元素删除用void erase(&first, &last) , 删除所有元素用void clear()
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"m4.erase(\"100\") = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m4.erase("100");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.erase(\"c\") = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m4.erase("c");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//搜索元素
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"m4.find(\"b\") : "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double>::iterator iterFind1;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
iterFind1 = m4.find("b");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (iterFind1 != m4.end())
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<(*iterFind1).second<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"not found!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.find(\"c\") : "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double>::iterator iterFind2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
iterFind2 = m4.find("c");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (iterFind2 != m4.end())
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<(*iterFind2).second<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"not found!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"Other: "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.empty() = "<<m4.empty()<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.size() = "<<m4.size()<<", m4.max_size() = (hex)"<<hex<<m4.max_size()<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//=================测试结=========================
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printMap(m4):
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert( map<const char*, double>::value_type("c
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
OOOOK!
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert( pair<const char*, double>("d", 2.3) ) =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
OK
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert( make_pair("e", 6.3) ) =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
OK
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 6.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert(make_pair("e", 10.2) ) :
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
in this way, reinsert the same elem will failed
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Failed!!
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 6.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4["e"] = 10.2 will OK,
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
but maybe low-level efficiency, and dont return tu
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 10.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.erase("100") =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 10.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.erase("c") =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 10.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.find("b") :
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.find("c") :
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
not found!
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Other:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.empty() = 0
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.size() = 4, m4.max_size() = (hex)fffffff
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
快速插入Key - Value 记录。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
快速删除记录
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
根据Key 修改value记录。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
遍历所有记录。
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
MAP的插入方式跟别的容器有所不同:除数组形式插入方式外,插入元素时,如果key值相同,则不做插入动作,
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//建议:特殊元素的插入前先遍历是否存在,若存在则将其删除后再插入
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <map>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <string>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void printMap( map<const char*, double> &m)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double>::iterator iter;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
for (iter = m.begin(); iter !=m.end(); iter++)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<iter->first<<": "<<iter->second<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void main()
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bool bRet = false;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
string str;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//创建map对象
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//创建一个没有任何元素的map对象m,元素的键值类型是char,映照数据类型为int,键值的比较函数对象为greater<char>
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<char, int, greater<char> > m1;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//创建一个map对象m2,元素的键值类型为const char*, 映照数据类型为int, 键值的比较函数对象为strLess
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//map<const char *, int> m(strLess());
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double> m2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double> m3(m2); //用一个map容器的元素和比较函数拷贝生成一个新的map容器对象
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
pair<const char*, double> p1("a",3.6);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
pair<const char*, double> p2("b", 3.2);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif)
pair<const char*, double> pairArray[] =
![](http://www.cppblog.com/Images/dot.gif)
{p1,p2};
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double> m4(pairArray, pairArray+2); //拷贝迭代区间[first, last)所指的数据,创建一个map对象
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"printMap(m4): "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素插入 1-value-type (该方法又细分为4种: value_type, pair, make_pair, 下标方式)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"m4.insert( map<const char*, double>::value_type(\"c\", 1.8) ) = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
bRet = m4.insert( map<const char*, double>::value_type("c", 1.8) ) .second;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (bRet)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"OOOOK!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"FFFFailed!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.insert( pair<const char*, double>(\"d\", 2.3) ) = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str = (m4.insert( pair<const char*, double>("d", 2.3) )).second ? string("OK") : string("Failed!!");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<str<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.insert( make_pair(\"e\", 6.3) ) = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//m4.insert( map<const char*, double>::value_type("e", 6.3) );
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str = (m4.insert( make_pair("e", 6.3) ) ).second ? string("OK") : string("Failed!!");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<str<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.insert(make_pair(\"e\", 10.2) ) : \nin this way, reinsert the same elem will failed "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
str= ( (m4.insert(make_pair("e", 10.2))).second ) ? string("OK") : string("Failed!!");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<str<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4[\"e\"] = 10.2 will OK, \nbut maybe low-level efficiency, and dont return ture/false."<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m4["e"] = 10.2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素插入:2-在某位置前插入 insert(&pos, elem)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素插入:3-迭代区间的插入 insert(&first, &last)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//略
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//元素删除 键值删除用size_type erase(elem), 迭代器位置上的元素删除用void erase(&pos);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//迭代区间[&first, &last)元素删除用void erase(&first, &last) , 删除所有元素用void clear()
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"m4.erase(\"100\") = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m4.erase("100");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.erase(\"c\") = "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
m4.erase("c");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
printMap(m4);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
//搜索元素
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"m4.find(\"b\") : "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double>::iterator iterFind1;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
iterFind1 = m4.find("b");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (iterFind1 != m4.end())
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<(*iterFind1).second<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"not found!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.find(\"c\") : "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
map<const char*, double>::iterator iterFind2;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
iterFind2 = m4.find("c");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
if (iterFind2 != m4.end())
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<(*iterFind2).second<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"not found!"<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<endl<<"Other: "<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.empty() = "<<m4.empty()<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
cout<<"m4.size() = "<<m4.size()<<", m4.max_size() = (hex)"<<hex<<m4.max_size()<<endl;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//=================测试结=========================
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printMap(m4):
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert( map<const char*, double>::value_type("c
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
OOOOK!
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert( pair<const char*, double>("d", 2.3) ) =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
OK
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert( make_pair("e", 6.3) ) =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
OK
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 6.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.insert(make_pair("e", 10.2) ) :
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
in this way, reinsert the same elem will failed
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Failed!!
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 6.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4["e"] = 10.2 will OK,
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
but maybe low-level efficiency, and dont return tu
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 10.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.erase("100") =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 10.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
c: 1.8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.erase("c") =
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
e: 10.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
d: 2.3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
b: 3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
a: 3.6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.find("b") :
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3.2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.find("c") :
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
not found!
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
Other:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.empty() = 0
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
m4.size() = 4, m4.max_size() = (hex)fffffff
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
相关文章推荐
- stl::map使用小结
- linux下使用hash_map及STL总结
- STL 中容器 map 的使用
- STL——map的使用
- STL-MAP使用方法总结
- 小心使用STL中map的[]操作符
- C++ STL 中 map 容器的说明和使用技巧
- Java集合工具Map、List、Set、Array使用小结
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- 正确使用STL-MAP中Erase函数 一切尽在代码中。
- stl std::map容器排序及使用注意事项
- STL中 MAP的使用
- STL之关联容器(pair、map、set的使用)
- map - 使用方法整理 (STL)
- STL之map容器使用
- C++ STL 中 map 容器的说明和使用技巧
- 【STL】map要点及使用
- 使用C++STL的map容器实现一种命令映射
- linux下使用hash_map及STL总结