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学习 |--迭 ...
随机推荐
- java的VO和PO的用途
最近在搞一个项目,用到了 springMVC,加深了我对VO和PO的理解,有感而发. 1 写在之前的提示 VO == Value Object PO == Persistant Object VO对应 ...
- Struts2文件下载找不到输入流异常
先发异常 Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check ...
- Smart_Script
target_type Name Value target_param1 target_param2 target_param3 target_x target_y target_z target_o ...
- visual studio 的Error List 显示乱码
复制到右键菜单如下: Severity Code Description Project File LineError 閿欒: 绋嬪簭鍖卌om.baidu.lbsapi.auth涓嶅瓨鍦? com. ...
- js中十进制数转换为16进制
使用 Number类的 toString()方法: var num = 255; console.log(num.toString(16));//输出FF
- word使用技巧-批量删除图片技巧
通过查找替换方法:ctrl+h,查找输入^g,替换输入空,然后替换即可. 今天看到一同事写的文档,发现里面很多word基础功能都不会用,比如同一级的标题居然有好几个样式,并且会级别搞错:列表里的数字居 ...
- asp.net 设置网页过期
/// <summary> /// 判断网页是否过期 /// </summary> /// <returns></returns> private bo ...
- Google副总裁的管理经验
一.拥挤其实是创新.拥挤喧闹的工作环境会引燃更多的创意火花.办公室应该充满能量和互动,而不是条块分割和等级分化. 二.战略和策略并举.许多人不懂得战略和策略的区别,或者他们认为自己只需要其中一样,其实 ...
- kvm
硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...
- 在Mac上使用vim的几个命令
Mac上面编辑文件的命令总是记不住,留一个参考!!! 如果是vim,则:Esc 退出编辑模式,输入以下命令: :wq 保存后退出vi,若为 :wq! 则为强制储存后退出(常用) :w 保存但不 ...