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学习 |--迭 ...
随机推荐
- Python使用re模块正则式的预编译及pickle方案
项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...
- 在不安装mysql-connector-net的情况下使用FluentData框架
最近在开发项目中使用了FluentData框架,通过使用这个框架减少了很多开发的工作量,FluentData是一个轻量级的框架操作起来的自由度很大也少了很多负责的配置.但是在开发的时候发现一个问题就是 ...
- ln 命令使用
今天在工作中遇到了“ln -sf”命令,发觉很久没用基本忘光,遂重拾鸟哥神书温补了一把. 简单描述的话,ln是linux中用来链接文件的,存在两种不同的连接: 1) Hard Link 实现该操作很简 ...
- subprocess模块
subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定义了一个类: Popen.可以使用Popen来创建进程,并与进程进行复杂的交互.它的构造函数如下: subp ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- asp.net 自定义控件 嵌入资源文件 备忘
要想在自定义用户控件中嵌入资源,从以下几个步骤入手: 1.在AssemblyInfo.cs中注册资源,文件夹层级用点隔开.例如: [assembly: System.Web.UI.WebResourc ...
- Disque
Disque是一个内存储存的分布式任务队列实现, 它由 Redis 的作者 Salvatore Sanfilippo (@antirez)开发, 目前正处于预览版(alpha)阶段. 本文档将对 Di ...
- TensorFlow官方文档中文版
github地址: https://github.com/jikexueyuanwiki/tensorflow-zh
- 如何判断exe或dll的目标平台及是否是.NET?
1. COFF文件头中偏移0处的Machine指示目标机器类型(IMAGE_FILE_MACHINE_AMD64等),偏移18处的Characteristics位指示文件属性(IMAGE_FILE_3 ...
- kubernetes多节点部署解析
注:以下操作均基于centos7系统. 安装ansible ansilbe可以通过yum或者pip安装,由于kubernetes-ansible用到了密码,故而还需要安装sshpass: pip in ...