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)
STL学习 - map的更多相关文章
- map--C++ STL 学习
map–C++ STL 学习 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力. 说下map内 ...
- STL的pair学习, map学习
http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...
- STL学习:STL库vector、string、set、map用法
本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...
- 侯捷STL学习(九)--关联式容器(Rb_tree,set,map)
layout: post title: 侯捷STL学习(九) date: 2017-07-21 tag: 侯捷STL --- 第十九节 容器rb_tree Red-Black tree是自平衡二叉搜索 ...
- 侯捷STL学习(十)--容器hashtable探索(unordered set/map)
layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...
- STL学习小结
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...
- 标准模板库(STL)学习探究之stack
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string
- ###STL学习--vector
点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习> ...
- ###STL学习--关联容器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...
随机推荐
- equals与==的区别
equals与==的区别. 下面是equals的源码 public boolean equals(Object anObject) { if (this == anObject) { //如果两个对象 ...
- STM32学习笔记——OLED屏
STM32学习笔记--OLED屏 OLED屏的特点: 1. 模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2. 显示尺寸为0.96寸 3. 分辨率为128*64 4. ...
- linux下利用GPRS模块发短信、打电话
一.开发环境 内核版本:linux-3.0 开发板:FL2440(nandflash:K9F1G08 128M) GPRS模块:SIM900 二.与发短信和拨号相关的 AT 指 ...
- PLC数据访问
PLC是很多机床设备上都有的控制中心,和PLC通信是很多做工厂管理系统的必经之路. 一年前有个项目需要和PLC(西门子S200)通信,不仅读取里面的数据,还需要写数据需要控制机床的运行,当时不大了解, ...
- varchar2_to_blob,应用向数据库更新LOB字段时的超时问题
将字符串转换为BLOB类型数据,写入服务器. 1,首先利用to_clob函数把varchar2字段转成 clob字段. 2 利用c2b上面函数将clob转成blob. 即: c2b(to_clob( ...
- 基于.NET平台常用的框架整理【转】
转:http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产 ...
- Eclipse中Sever启动成功,但tomcat无法管理页面无法访问。
- IOS开发之网络编程开源类 Reachability应用
先看Reachability.h发现 #import <Foundation/Foundation.h> #import <SystemConfiguration/SystemCon ...
- ios 写项目的时候遇到的问题及解决方案(3)
22.看了苹果的文档,里面有这一句话:All launch images must be PNG files and must reside in the top level of your appl ...
- Lab_3_SysOps_Storage_Linux_v2.5
System Operations - Lab 3: Managing Storage in AWS (Linux) - 2.5 =================================== ...