摘要: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. iOS RunLoop简介

    一.什么是RunLoop? RunLoop是运行循环,每个Cocoa应用程序都由一个处于阻塞状态的do/while循环驱动,当有事件发生时,就把事件分派给合适的监听器,如此反复直到循环停止.处理分派的 ...

  2. Linux0.11内核--进程调度分析之2.调度

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5596830.html ] 上一篇说到进程调度归根结底是调用timer_interrupt函数, ...

  3. IOS开发基础知识--碎片18

    1:initWithFrame方法的理解 . initWithFrame方法是什么? initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸). 当然,其他UI对 ...

  4. xCode5 在ios7模拟器中出现__cxa_throw _pthread_exit错误

    xCode5 在ios7模拟器中出现__cxa_throw _pthread_exit错误 2013年10月28日 ⁄ 综合 ⁄ 共 233字 ⁄ 字号 小 中 大 ⁄ 评论关闭   在项目中用模拟器 ...

  5. ORACLE 9i 数据库体系结构图

    ORACLE 9i 的数据库体系结构图,非常的全面.系统.高屋建瓴的整体介绍了ORACLE 9i 的数据库体系结构.如果能全面了解.清晰梳理.深入掌握这些知识点,相信对你了解学习.深入研究ORACLE ...

  6. SQL Server:触发器详解

    1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...

  7. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  8. mysql 安装问题

    针对免安装版的mysql: 1.启动CMD,在mysql安装目录下  ~\bin\目录下,输入: mysqld -install   安装msyql服务: 2.启动MySQL服务,输入: net st ...

  9. explicit抑制隐型转换

    本文出自 http://www.cnblogs.com/cutepig/ 按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: clas ...

  10. js中数组遍历for与for in区别(强烈建议不要使用for in遍历数组)

    js中遍历数组的有两种方式 var array=['a'] //标准的for循环 for(var i=1;i<array.length;i++){ alert(array[i]) } //for ...