STL学习 - map
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。
一、map的说明
1 头文件
#include <map>
2 定义
map<string, int> my_Map;
或者是
typedef map<string, int> MY_MAP;
MY_MAP my_Map;
3 插入数据
() my_Map["a"] = ;
() my_Map.insert(map<string, int>::value_type("b",));
() my_Map.insert(pair<string, int>("c",));
() my_Map.insert(make_pair<string, int>("d",));
4 查找数据和修改数据
() int i = my_Map["a"];
my_Map["a"] = i;
() MY_MAP::iterator my_Itr;
my_Itr.find("b");
int j = my_Itr->second;
my_Itr->second = j;
不过注意,键本身是不能被修改的,除非删除。
5 删除数据
() my_Map.erase(my_Itr);
() my_Map.erase("c");
还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。
6 迭代数据
for(my_Itr = my_Map.begin(); my_Itr != my_Map.end(); ++my_Itr)
{
……
}
7 其它方法
my_Map.size() //返回元素数目
my_Map.empty() //判断是否为空
my_Map.clear() //清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等,更高级的应用查帮助去吧,^_^;
二、map的举例
要求: 将mymap中itemstruct 的a大于100的项删除
struct itemstruct
{
int a;
char b[20];
};
map<string, itemstruct > mymap.
解答1:
#include <iostream>
#include <ctime>
#include <map>
using namespace std;
typedef struct itemstruct
{
int a;
char b[];
}itemS;
itemS s[] = {{,"what"},
{, "hello"},
{,"world"},
{, "c++"}
};;
int main()
{
map<string, itemS> mymap;
string str[] = {"1st","2nd","3rd","4th"};
for(int i = ; i < ; i++)
{
mymap.insert(make_pair(str[i], s[i]));
} map<string, itemS>::iterator it;
for(it = mymap.begin(); it != mymap.end(); it++)
{
if(it->second.a > )
{
i = mymap.erase(it); ----->正确
mymap.erase(it); ----->it失效..
}
}
//first是Key, second是value;
for(it = mymap.begin(); it != mymap.end(); it++)
{
cout<<it->first<<" "<<it->second.a<<" "<<it->second.b<<endl;
}
system("pause");
return ;
}
解答2:
#include <map>
#include <iterator>
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
struct itemstruct
{
int a;
char b[];
itemstruct(int t, char* str)
{
a = t;
strcpy(b, str);
}
};
int main()
{
map<string,itemstruct> mymap;
mymap.insert(make_pair("a", itemstruct(,"hanzhou")));
mymap.insert(make_pair("ab", itemstruct(,"fuzhou")));
mymap.insert(make_pair("abc", itemstruct(,"zhengzhou")));
mymap.insert(make_pair("abcd", itemstruct(,"wuhan")));
mymap.insert(make_pair("abcde", itemstruct(,"kunming")));
mymap.insert(make_pair("abcdef", itemstruct(,"xiamen")));
map<string,itemstruct>::iterator it = mymap.begin();
while(it != mymap.end())
{
if((it->second).a > )
mymap.erase(it++);
else
it++;
}
it = mymap.begin();
while(it != mymap.end())
{
cout<<it->first<<" "<<(it->second).a<<" "<<(it->second).b<<endl;
it++;
}
system("PAUSE");
return ;
}
解答3:
for(map<string, itemstruct>::iterator i = mymap.begin(); i != mymap.end();)
{
if(i->second.a > )
i = mymap.erase(i);
else
++i;
}
解答4:VC6中编译map编译出错的解决方法
Warnings similar to the following are generated even if you use the warning pragma to disable the warning: warning C4786: 'std::rb_tree<CAiSpanningTree<State,std::less<State>>::TransClosureNode, CAiSpanningTree<State,std::less<State>>::TransClosureNode,std::ident<Cai SpanningTree<State,std::less<State>>::TransClosureNode,CAiSpanningTree<S tate,std::less<State>>::TransClosureNode>,std::less<CAiSpanningTree<Stat e,std::less<State>>::TransClosureNode>>' : identifier was truncated to '255' characters in the debug information
解决code 加在stdafx.h的头文件处:
#pragma warning(disable:4786)
最新文章
- NodeOS操作系统
- 【bzoj3884】 上帝与集合的正确用法
- Android IOS WebRTC 音视频开发总结(七三)-- 我为什么走上了创业这条不归路?
- sqlite数据库 select 查询带换行符数据
- 基于JSP+SERVLET的新闻发布系统(一)
- Android:仿手机QQ朋友动态ListView
- poj_2195Going Home(最小费用最大流)
- IDEAL 热更新
- uWSGI+Django+nginx(下)
- Ubuntu下OpenCV版本切换
- python拟合数据,并通过拟合的曲线去预测新值的方法
- Easyui-textbox得到焦点方法
- Tomcat启动项目时内存溢出问题如何解决
- XGBoost介绍
- 1-10假期训练(hdu-2059 简单dp)
- 论文笔记之:Dynamic Label Propagation for Semi-supervised Multi-class Multi-label Classification ICCV 2013
- Java类中的各种成员的加载顺序
- FastReport.Net使用:[33]高亮显示
- JavaScript操作符
- Cannot send session cache limiter - headers already sent问题