摘要:std::map作为一个容器存在一个典型应用就是作为关联数组来作用。在诸如Java等等语言中,关联数组广泛存在。std::map是一个容器,在它的概念框架中存在两个词:键和值,std::map把一个键与一个值相对,它相当于一个字典,把一个索引和一人内容对应起来。一般情况下,std::map用一个平衡二叉树来实现的,所以它的大部分操作都可以log(n)的时间里完成。下面让我们看看其中的简单使用:

#include<map>
//定义一个整数到整数的映射
//其中前一个键,后一个是值
std::map<int, int> map;

//要创建一个简单的映射,可以这样
//下面两句在map创建两个结点,分别完成预期的映射
map[0]=12;
map[99]=13;

std::map是以结点的形式存储其中的元素的,我们可以手工制造一个结点然后放到容器中或者从容器删除相关条件的结点,这些都由“键”来驱动的,也就是说一个操作你往往要告诉std::map是针对哪个键进行的。

下面给出一些典型的代码:

#include<map>
#include<string>
#include<utility>
#include<iostream>

std::map<std::string, int> string_int;
string_int["one"]=12;
string_int["name"]=88;
//插入元素的另一种方法
string_int.insert(std::make_pair(std::string("ok"), 0));

//搜索指定的键
std::map<std::string, int>::const_iterator b=string_int.find("ok");
//如果找到
if(b!=string_int.end())
{
        std::cout << "ok: " << *b << std::endl;
}

//删除指定元素,根据迭代器
string_int.erase(b);
//删除指定元素,根据键,返回删除的个数
//对于std::map而言只能是0或1,但对于std::mutimap而言就不一定了
size_t n=string_int.erase("one");

 

c++的std::map类通过[]访问

#pragma warning(disable:4786)  
#include <map>
#include <string>
#include <iostream>
 
int main()
{
using namespace std;
 
map<int, string> names;  
// 元素追加
names.insert( map<int, string>::value_type( 10, "aaa" ) );
names.insert( map<int, string>::value_type( 30, "ccc" ) );
names.insert( map<int, string>::value_type( 50, "eee" ) );
names.insert( map<int, string>::value_type( 40, "ddd" ) );
names.insert( map<int, string>::value_type( 20, "bbb" ) );
 
// 变更值
names[50] = "fff";
//输出
cout << names[10] << endl;
cout << names[20] << endl;
cout << names[30] << endl;
cout << names[40] << endl;
cout << names[50] << endl;
 
return 0;
}
 
 
 
 
 
原文转自:http://blog.sina.com.cn/s/blog_601996e40100tj57.html
原作者为 晓月清蒸. 请尊重原作者版权
 

C++标准库:std_map作为一个关联数组的更多相关文章

  1. 怎么使用C++标准库来实现二维数组

    在编程里,像界面布局是二维的,那么常常使用二维数组来表示界面的元素,那么就需要使用二维的数组,在现在C++肯定是以标准库为基础了,不再使用C的二维数组,那么怎么样做呢?下面就使用vector来实现二维 ...

  2. php json_decode() 如果想要强制生成PHP关联数组,json_decode()需要加一个参数true

    php json_decode()该函数用于将json文本转换为相应的PHP数据结构.下面是一个例子:$json = '{"foo": 12345}';$obj = json_de ...

  3. C++ 标准库类型-String,Vector and Bitset

    <C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...

  4. perl5 第九章 关联数组/哈希表

    第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制二.定义三.访问关联数组的元素四.增加元素五.创建关联数组六.从数组变量复制到关联数组七.元素的增删八.列出数组的索引和值九 ...

  5. js关联数组

    标准javascript 是内含支持hash关联数组,经查找资料并测试,有关标准javascript内含的hash关联数组操作备忘如下 1.Hash关联数组定义 // 定义空数组 myhash = { ...

  6. C++解析(18):C++标准库与字符串类

    0.目录 1.C++标准库 2.字符串类 3.数组操作符的重载 4.小结 1.C++标准库 有趣的重载--操作符 << 的原生意义是按位左移,例:1 << 2;,其意义是将整数 ...

  7. C++标准库vector及迭代器

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  8. 从PHP底层源码去深入理解数组,并用C模拟PHP关联数组(原创)

    PHP是一门入门容易,使用范围广泛的语言,以其灵活性以及web后端开发被很多人熟知,也被很多人戏称“PHP是世界上最好的语言”.本人是一名“忠实”的PHPer,相信用过PHP的程序员都会体会到PHP数 ...

  9. C++ Primer 有感(标准库vector及迭代器)

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

随机推荐

  1. Android源码中内置包含so文件的APK文件

    方法一: 在packages/apps下面以需要预置的APK名字创建文件夹,以预置一个名为Test的APK为例 将Test.apk放到packages/apps/Test下面 在packages/ap ...

  2. 设置 TabBarItem 选中时的图片及文字颜色

    TabBarController 是在 ios 开发过程中使用较为频繁的一个 Controller,但是在使用过程中经常会遇到一些问题,例如本文所要解决的,如何修改 TabBar 选中时文字及图片的颜 ...

  3. 项目管理详细任务(PMBOK2008)

    启动 规划 执行 监控 收尾 选择项目经理 确定你将如何做计划-作为项目管理计划的一部分 组建最终项目团队 根据绩效基线进行绩效测量 确定收尾过程 确定公司文化和现存组织形式 创建项目范围说明书 执行 ...

  4. EntityFramework简介

    EntityFramework是什么? 1.是对ADO.NET 更高封装的ORM (对象关系映射)框架,跟Nhibernate类似 2.用面向对象的方式来操作关系数据库 3.目标: 提高开发效率,减轻 ...

  5. RMAN备份失败: ORA-19502 & ORA-27072: File I/O error

    早上检查一ORACLE数据库的RMAN备份的邮件时,发现出现了ORA-27072: File I/O error等错误,具体信息如下所示: channel ORA_DISK_1: starting p ...

  6. SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

    在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...

  7. 数据库服务器改名导致Reporting Service不可用的案例

    案例环境: 操作系统版本    :    Windows Server 2012 R2 Standard 数据库版本      :   SQL Server 2012 Standard Edition ...

  8. sizeof

    一.sizeof使用的场合: 1.sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信.例如: void* malloc(size_t size); size_t fread(v ...

  9. java实现串口通讯

    一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到  %JAVA_HOME%\jre\lib\ext\  目录下,工程中引入该jar包 3. 将rxtxSe ...

  10. java实现批量下载百度图片搜索到的图片

    就是写的个小程序,用于记录一下,方便后续查看,首先感谢下面这个博客,从这篇文章衍生的吧,大家可以学习下: http://www.cnblogs.com/lichenwei/p/4610298.html ...