STLmap的格式这这样的。map<key,value> a;
其中key是键的意思,value是值。俗称键值对。
STL中map有两种方式,第一种就是map,这种方式的键不可以是相同的。第二种方法是multimap,这种map是允许键相同的。
上代码查看实际效果:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<int, string> a;
map<string, int> 分数;
multimap<int, string> ma;
//因为map是一对一对的,要先把一组数据整合成一对然后插入map中
//使用value_type
//添加
a.insert(map<int,string>::value_type(1,"one"));//第一种插入方法
a.insert(map<int,string>::value_type(2,"two"));
a.insert(map<int,string>::value_type(3,"three"));
a.insert(make_pair(-1,"Minus one")); //第二种插入方法
a.insert(pair<int,string>(1000,"One Thousand"));//第三种方法
a[1000000] = "One Million"; //第四种方法
cout << "map里面一共有" << a.size() << "个key-value对数据" << endl;
分数.insert(make_pair("张飞",99));
分数.insert(make_pair("刘备",56));
分数["关羽"] = 87;
//使用迭代器把数据显示出来
cout << "这些数据是:" << endl;
map<int, string>::const_iterator i;
for (i = a.begin(); i != a.end(); ++i)
{
cout << "key :" << i->first << " ";
cout << "Value :" << i->second.c_str()<< " ";//使用C语言方式显示出来
cout << "Value :" << i->second<< " ";//使用C++方式显示出来
cout << endl;
}
ma.insert(multimap<int,string>::value_type(3,"three"));
ma.insert(multimap<int,string>::value_type(45,"forth five"));
ma.insert(make_pair(-1,"minus one"));
ma.insert(pair<int,string>(1000,"one throusand"));
ma.insert(pair<int,string>(1000,"one throusand"));
cout << endl << "multimap里面有" << ma.size() << "个数据" << endl;
multimap<int, string>::const_iterator im;
for (im = ma.begin(); im != ma.end(); ++im)
{
cout << "key:" << im->first;
cout << "value:" << im->second;
cout << endl;
}
//使用count可以查看里面有几个1000
cout << "multimap里面" << ma.count(1000) << "个1000" << endl;
///
//查找
//最简单的查找,通过键查找value
cout << "最简单的查找" << endl;
cout << a[3] << endl << endl;
cout << 分数["刘备"] << endl << endl;
multimap<int, string>::const_iterator fi;
fi = ma.find(45);
if (fi != ma.end())
{
cout << "找到了:" << fi->first << " = " << fi->second << " ";
}
else
{
cout << "没找到" << endl;
}
fi = ma.find(1000);
if (fi != ma.end())
{
cout << "找到了1000" << endl;
size_t n = ma.count(1000);
for (size_t i = 0; i < n; ++i)
{
cout << "\t Key: " << fi->first;
cout << ", Value[" << i << "] = ";
cout << fi->second << endl;
++fi;
}
}
else
{
cout << "没找到" << endl;
}
删除
//第一种方法
if (ma.erase(-1) > 0)//如果删除成功返回值大于0
{
cout << "删除-1成功" << endl;
}
//使用非常量迭代器
//第二种方法
multimap<int, string>::iterator ir = ma.find(45);
if (ir != ma.end())
{
ma.erase(ir);
cout << "删除45成功!" << endl;
}
//第三种方法
// 最前的1000 最后的1000//这两者之间的1000都删除了
ma.erase(ma.lower_bound(1000),ma.upper_bound(1000));
return 0;
}