C++11中map的用法
1. map最基本的构造函数;
map<string ,int>mapstring; map<int,string >mapint;
map<sring,char>mapstring; map< char ,string>mapchar;
map<char,int>mapchar; map<int ,char>mapint;
2. map添加数据;
map<int ,string>maplive;
1. maplive.insert(pair<int,string>(102,"aclive"));
2. maplive.insert(map<int,string>::value_type(321,"hai"));
3. maplive[112]="April";//map中最简单最常用的插入添加!
3. map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);//返回的是一个指针
if(l_it==maplive.end())
cout<<"we do not find112"<<endl;
elsecout<<"wo find112"<<endl;
map<string,string> m;
if(m[112]=="")
cout<<"we do not find112"<<endl;
4. map中元素的删除:
如果删除112;
map<int ,string>::iterator l_it;;
l_it =maplive.find(112);
if( l_it == maplive.end())
cout<<"we do not find112"<<endl;
else maplive.erase(l_it);//delete 112;
5. map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include<map>
#include<iostream>
usingnamespace std;
int main()
{
map <int, int> m1, m2, m3;
map <int,int>::iterator m1_Iter;
m1.insert( pair <int, int>(1, 10 ) );
m1.insert ( pair <int,int> ( 2, 20 ) );
m1.insert ( pair <int,int> ( 3, 30 ) );
m2.insert ( pair <int,int> ( 10, 100 ) );
m2.insert ( pair <int,int> ( 20, 200 ) );
m3.insert ( pair <int,int> ( 30, 300 ) );
cout << "The original map m1is:";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )
cout << " "<<m1_Iter->second;
cout << "."<< endl;
// This isthe member function version of swap
// m2 is said to be theargument map; m1 the target map
m1.swap( m2);
cout << "Afterswapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
cout << "After swapping with m2, mapm2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end(); m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "Afterswapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end(); m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
}
6. map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:
#include<map>
#include<iostream>
usingnamespace std;
int main( )
{
map<int, int> m1;
map <int,int>::iterator m1_Iter;
m1.insert (pair <int, int> (1, 20 ) );
m1.insert ( pair<int, int> ( 4, 40) );
m1.insert ( pair<int, int> ( 3, 60) );
m1.insert ( pair<int, int> ( 2, 50) );
m1.insert ( pair<int, int> ( 6, 40) );
m1.insert ( pair<int, int> ( 7, 30) );
cout<< "The original map m1is:"<<endl;
for ( m1_Iter = m1.begin( );m1_Iter != m1.end( ); m1_Iter++ )
cout << m1_Iter->first<<""<<m1_Iter->second<<endl;
}
The original map m1 is:
1 20
2 50
3 60
4 40
6 40
7 30
7. map的基本操作函数:
C++Maps 是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
- //multimap允许重复的键值插入容器
- // **********************************************************
- // * pair只包含一对数值:pair<int,char> *
- // * map是一个集合类型,永远保持排好序的, *
- // pair * map每一个成员就是一个pair,例如:map<int,char> *
- // * map的insert()可以把一个pair对象作为map的参数,例如map<p> *
- // ***********************************************************
- #pragma warning(disable:4786)
- #include<map>
- #include<iostream>
- using namespace std;
- int main(void)
- {
- multimap<int,char*> m;
- //multimap的插入只能用insert()不能用数组
- m.insert(pair<int,char*>(1,"apple"));
- m.insert(pair<int,char*>(1,"pear"));//apple和pear的价钱完全有可能是一样的
- m.insert(pair<int,char*>(2,"banana"));
- //multimap的遍历只能用迭代器方式不能用数组
- cout<<"***************************************"<<endl;
- multimap<int,char*>::iterator i,iend;
- iend=m.end();
- for(i=m.begin();i!=iend;i++)
- {
- cout<<(*i).second<<"的价钱是"
- <<(*i).first<<"元/斤\n";
- }
- cout<<"***************************************"<<endl;
- //元素的反相遍历
- multimap<int,char*>::reverse_iterator j,jend;
- jend=m.rend();
- for(j=m.rbegin();j!=jend;j++)
- {
- cout<<(*j).second<<"的价钱是"
- <<(*j).first<<"元/斤\n";
- }
- cout<<"***************************************"<<endl;
- //元素的搜索find(),pair<iterator,iterator>equal_range(const key_type &k)const
- //和multiset的用法一样
- multimap<int,char*>::iterator s;
- s=m.find(1);//find()只要找到一个就行了,然后立即返回。
- cout<<(*s).second<<" "
- <<(*s).first<<endl;
- cout<<"键值等于1的元素个数是:"<<m.count(1)<<endl;
- cout<<"***************************************"<<endl;
- //删除 erase(),clear()
- m.erase(1);
- for(i=m.begin();i!=iend;i++)
- {
- cout<<(*i).second<<"的价钱是"
- <<(*i).first<<"元/斤\n";
- }
- return 0;
- }
C++11中map的用法的更多相关文章
- STL中map的用法
map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候 ...
- C语言 · C++中map的用法详解
转载自:http://blog.csdn.net/sunquana/article/details/12576729 一.定义 (1) map<string, int> Map ...
- [转]Java中Map的用法详解
转载地址:http://www.zhixing123.cn/jsp/30113.html Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictio ...
- Java中Map的用法
Map的一般用法 1.声明一个Map : Map map = new HashMap(); 2 .向map中放值 ,注意: map是key-value的形式存放的,如: map.put("s ...
- Java中Map的用法详解
Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collecti ...
- java中Map的用法(HaspMap用法)
public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. import java.util.HashMap; impo ...
- C++中map的用法
map的特性是,所有元素都会根据元素的减值自动被排序.map的所有元素都是pair,同时拥有实值(value)和键值(key).pair的第一个元素会被视为键值,第二个元素会被视为实值.map不允许两 ...
- C++中Map常见用法以及按照value排序
今天做一个简单的算法题,居然用了1个小时,STL unordered_map用多了,没想到map这次派上了用场,这里记录一下: 算法题为 给一个字符串例如 abaaba,每连续两个字符组成一个子串 ...
- JS中Map的用法
声明 var map = new Map(); 设值 map.set("key","value"); 取值 map.get("key"); ...
随机推荐
- Oracle 报错ORA-00904:标示符无效
写select查询,报错:ORA-00904 标示符无效 这个错误通常是因为 字段名写错了,或者是在创建表的时候,创建最后一个字段的时候也加了逗号 . 我遇到的情况时,之前的同事创建表的时候,将小写的 ...
- mysql史上最全的学习资料
Ⅰ.mysql 1.mysql小基础 (1)数据类型 类型 备注 tinyint/smallint/mediumint/int/bigint 1B/2B/3B/4B/8B float/double 单 ...
- java并发包分析之———AQS框架
一.什么是同步器 多线程并发的执行,之间通过某种 共享 状态来同步,只有当状态满足 xxxx 条件,才能触发线程执行 xxxx . 这个共同的语义可以称之为同步器.可以认为以上所有的锁机制都可以基 ...
- 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象
不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味. 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象.抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性.如果抽象 ...
- windows下编译安装BOOST
boost的编译和使用,经过搜集资料和总结,记录成文.感谢文后所列参考资料的作者. 1 下载 地址:http://sourceforge.net/projects/boost/files/boost/ ...
- 兼容 Android 4.4 透明状态栏与导航栏
http://www.apkbus.com/Android-163388-1-1.html?_dsign=73d41229 android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加 ...
- 分布式文件系统MFS、Ceph、GlusterFS、Lustre的比较
原文:http://blog.csdn.net/metaxen/article/details/7108958 MooseFS(MFS) Ceph GlusterFS Lustre Metadata ...
- 新导入的eclipse项目报错,找不到java包,找不到web.xml文件报错。
新导入的项目可能会出现报错,特别是web项目.我这里提供一种解决方法: 1.右击项目,选择“属性” 2.选择 Resource->java build path->libraries 图中 ...
- 利用redis自制幻灯片弹幕
前段时间赶项目,忙结婚,各大技术平台都没时间上,不过还是抽出点时间为自己的婚礼做了一点小玩具,今天我就来给大家分享一下. 先来看一下效果 这个项目是基于微信个人订阅号的,订阅号的开发在此我就不再赘述了 ...
- springmvc+swagger构建Restful风格文档
本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...