摘要: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之关于 srand() 和rand()

    srand(seed)用来将随机序列的起始点设为seed srand((int)time(0))表示以当前时间对应的int值为随机序列起点,这样每次运行程序,由于起点不同才可以得到不同的随机数 tim ...

  2. Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理

    Toolbar作为ActionBar使用介绍 本文介绍了在Android中将Toolbar作为ActionBar使用的方法. 并且介绍了在Fragment和嵌套Fragment中使用Toolbar作为 ...

  3. jQuery初探 jQuery选取和操纵元素的特点

    jQuery初探 jQuery选取和操纵元素的特点 JavaScript选取元素 先来看看不用jQuery的时候我们是怎么处理元素选取的. JavaScript选取元素的时候,可以根据id获取元素,当 ...

  4. 【产品 & 设计】入门 - 工具篇 - Sketch + Skala Preview

    前言 做产品和设计快 1 年了,积累了一点经验分享一下 —— 抛砖引玉,欢迎交流. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: ht ...

  5. footer置底

    html代码: <div class="container"> <div cass="header"></div> < ...

  6. Thinking in Java 笔记

    大二就买了这本书,如今再看这本书,看到了一些以前没看的细节,也有了不同的体会.本文使用第4版,整理每章的笔记心得.老外的书有个特点,他会花费大量的文字去阐述一个概念,这比堆代码强多了. 第 1 章 对 ...

  7. (转)Div和Table的区别

    原文:http://www.cnblogs.com/lovebear/archive/2012/04/18/2456081.html Div与table的区别 1:速度和加载方式方面的区别 div 和 ...

  8. Oracle索引梳理系列(八)- 索引扫描类型及分析(高效索引必备知识)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  9. x01.Weiqi.9: 点目功能

    添加点目功能,虽不中,不远也.还是先看看截图吧. 确保其可行,再看一张: 其点目结果,还是比较令人满意的.这主要得益于多遍扫描,如编译器的词法分析阶段,下面的代码可以证明: private void ...

  10. JAVA JVM虚拟机选项:Xms Xmx PermSize MaxPermSize 区别

    Xms : 是指设定程序启动时占用内存大小.一般该值设置大的会使程序启动快,但是可能会使本机暂时变慢. Xmx : 是指设定程序运行期间最大可占用的内存大小,如果程序运行需要占用更多的内存,超出这个 ...