没有躲过的坑--map的初始化(插入数据)

最近工作中需要使用map,进行查询。

首先简单介绍一点map,也许是教科书里讲授最少的STL知识吧。但是在实际工作中map挺重要的,用于查找很方便快捷,尤其是以键和值的形式存在的!

1、头文件

#include<map>

2、map的功能

自动建立Key - value的对应。key 和 value可以是任意你需要的类型。

根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。

快速插入Key - Value 记录。

快速删除记录

根据Key 修改value记录。

遍历所有记录。

3、map的构造函数

map共提供了6个构造函数,我们通常用如下方法构造一个map:

Map<int, string> mapStudent;

4、插入数据

(1)my_Map[“a”]=1;

改变map中的条目非常简单,因为map类已经对[]操作符进行了重载

enumMap[1] = “One”;

enumMap[2] = “Two”;

…..

这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为”Two”; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:

enumMap.insert(map<int, CString> :: value_type(2, "Two"))
my_Map.insert(map<string,int>::value_type("b",2));
my_Map.insert(pair<string,int>("c",3));
my_Map.insert(make_pair<string,int>("d",4));

起初我就是用上面愚蠢的方法进行了插入数据,但是我的数据量挺大的,需要近一千对,总不能一条一条的这样写吧。

于是想起了之前写的博客《c++11特性之initializer_list》,是不是可以使用初始化列表对map进行赋值呢,答案是肯定的。

std::map<int, string> int_to_string = {
{1, "what"},
{2, "a"},
{3, "fuck"},
{4, "day"},
....
};
时间: 2024-10-25 06:08:53

没有躲过的坑--map的初始化(插入数据)的相关文章

map容器对象插入数据的4种方式【转】

#include <string>#include <iostream> #include <map> #include <utility> using namespace std;int main(){    map<int, string> Employee;    //通过键值赋值    Employee[123] = "Mayuefei";    //通过成员函数insert和STL的pair赋值    Employe

map容器对象插入数据的4种方式奏籽鬃壮踪字

http://www.ebay.com/cln/zdp_dnlh/2015-01-28/165338008010 http://www.ebay.com/cln/nz7_hxfr/2015-01-28/165338011010 http://www.ebay.com/cln/jt9_xpth/2015-01-28/165289861018 http://www.ebay.com/cln/pnz_rffj/2015-01-28/165338016010 http://www.ebay.com/cl

没有躲过的坑--成对使用new和delete时要采取相同的形式

new创建类对象与不new区别: new创建类对象需要指针接收,一处初始化,多处使用 new创建类对象使用完需delete销毁 new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间 new对象指针用途广泛,比如作为函数返回值.函数参数等 而且每个学习C++编程的人都知道成对的使用new和delete,也也就是new申请的内存用delete释放,new []申请的内存由delete []释放. std::string* first_string = new std::string;

没有躲过的坑--指针(内存泄露)

C++被人骂娘最多的就是指针. 夜深人静的时候,拿出几个使用指针容易出现的坑儿.可能我的语言描述有些让人费劲,尽量用代码说话. 通过指向类的NULL指针调用类的成员函数 试图用一个null指针调用类的成员函数,导致崩溃: #include <iostream> using namespace std; class A { int value; public: void dumb() const {cout << "dumb()\n";} void set(int

双向循环链表 初始化 插入 删除

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(DuLNode)

顺序表 初始化 插入 删除 查找 合并 交换 判断为空 求长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define TRUE 1 #define ERROR -1 #define FALSE -1 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(SqList) #define MLC (Li

支持泛型AVL Tree的简单实现,并和STL map比较了插入,删除,查找的性能

1.问题描述: 1)AVL tree是一种自平衡树.它通过左右子树的高度差来控制树的平衡,当高度差是不大于1的时候,认为树是平衡的.树的平衡保证了树在极端情况下 (输入序列不够随机)的性能.很显然当左右子树高度平衡,保证了任何插入,删除,查找操作平均性能呢个,当不平衡时(有的子树很高),当 要操作的元素在这个子树时,性能会很差: 2)AVL tree 和Red black tree 都是一种平衡树,它的操作的时间复杂度是:O(lgN) ,N是树的节点的数目: 3)本文实现了AVL Tree, 并

ios app初始化和数据迁移的设计思路

整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件夹内(比方UserDefaults或者Documents文件夹),用一个字段保存老版本 2.在開始初始化之前,读取老版本.以及当前版本 3.假设该应用是第一次载入,那么老版本就取不到(由于是初次载入,这个字段还没有保存),那么就能够运行初始化过程.假设取到了老版本.就不运行初始化 4.初始化完毕之后

使用Map List 封装json数据

<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> import net.sf.json.JSONObject; public static