map

时光总嘲笑我的痴心妄想 提交于 2019-11-29 01:47:45

map 平衡二叉树关系(联)式容器(已序)

字典 map<拼音,汉字>

map是一个容器,里面每一个元素分为两个逻辑块 其中一个逻辑区块叫做key(药匙) 另一个逻辑区块叫做value(值)

map是一个已序容器 元素进入容器会有一个排序的操作,通过key的大小进行排序,默认升序

 

map的元素中的key及value两者都必须是可以赋值和拷贝

key是必须可以被比较的 如果key是一个自定义类型,重载运算符(根据key值查找元素赫努埃,根据value查找运算符很慢)

最快的查找方式 :二分查找(折半查找)

使用计算机解决实际问你 分析问题涉及的数据 合理组织数据 规划解决问题的算法的过程

算法:解决问题的流程

时间复杂度:运行时间

空间复杂度:指令空间、数据空间、环境栈空间

 

set理解为key和value是同一个数值的map

multimap允许出现多个重复的key值

map中key是唯一的 如果出现了多个key 后面的value覆盖前面的value

m.erase(5) 删除key为5的元素 这个key和对应的value都会被删除

三种插入方式:

m.insert(pair<int,string>(4,"1234"));//通过pair进行插入

m.insert(map<int,string>::value_type(5,"1234")); //通过map内部定义的一个结构进行插入

m.insert(make_pair(3,"1234"));//通过std里面的一个函数进行插入

 1 // map.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<vector>
 6 #include <string>
 7 #include <map>
 8 #include <set>
 9 #include <xfunctional>
10 using namespace std;
11 
12 class Cstu{
13     char*name;
14     char age;
15     float height;
16 };
17 
18 int _tmain(int argc, _TCHAR* argv[])
19 {
20     //set<int> s1;//set的key和value是同一数值的map
21     //s1.insert(1);
22     //s1.insert(2);
23     //multimap<int,double> m;
24     ////m[1] = 1.1;不可以这样添加
25     ////multimap的插入元素的方式
26     //m.insert(std::make_pair(1, 1.10));
27     //m.insert(std::make_pair(1, 1.11));
28     //m.insert(std::make_pair(1, 1.12));
29     //m.insert(std::make_pair(2, 1.10));
30     ////添加迭代器
31     //multimap<int,double>::iterator mit;
32     //mit = m.find(1);
33     //mit++;
34     //mit = m.lower_bound(1);//返回key为1的第一个可插入位置
35     //mit = m.lower_bound(1);//返回key为1的最后一个可插入位置
36     //printf("key=%d,value=%f\n", mit->first, mit->second);
37     //for (mit = m.begin(); mit != m.end(); ++mit)
38     //{
39     //    printf("key = %d,value = %f\n", mit->first, mit->second);
40     //}
41     //map<double, string, std::greater<double>> m1;//降序
42     //m1[1.1] = "zhang san";
43     //m1[0.44] = "li si";
44     //m1[3.21] = "wang wu";
45     //m1[1.1] = "abc";
46 
47     //map<double, string, std::greater<double>>::iterator mit1;
48 
49     //for (mit1 = m1.begin(); mit1 != m1.end(); ++mit1)
50     //{
51     //    printf("key = %f,value = %s\n", mit1->first, mit1->second.c_str());//c_str保证输出类型为字符串
52     //}
53     //vector<int> v;
54     //v[1];
55     //Cstu s;
56     map<string, Cstu> m4;
57     map<int, Cstu> m3;
58     map<int, string> m2;
59     m2[17] = "zhang san";
60     m2[2] = "li si";
61     m2[5] = "wang wu";
62     m2[2] = "abc";
63     m2.erase(5);
64     m2.insert(pair<int, string>(4, "1234"));//通过pair进行插入
65 
66     m2.insert(map<int, string>::value_type(5, "1234")); //通过map内部定义的一个结构进行插入
67 
68     m2.insert(make_pair(3, "1234"));//通过std里面的一个函数进行插入
69     map<int, string>::iterator mit2;
70     mit2 = m2.find(17);
71     printf("key = %d,value = %s\n", mit2->first, mit2->second.c_str());
72     printf("//================\n");
73 
74     for (mit2 = m2.begin(); mit2 != m2.end(); ++mit2)
75     {
76         printf("key = %d,value = %s\n", mit2->first, mit2->second.c_str());
77     }
78 
79     map<int, double> m;
80     m[1] = 3.14;//m表示一个容器,在这个容器里面有一个元素,这个元素的key为1,值映射为3.14
81     m[5] = 1.11;
82     m[2] = 4.54;
83     m[10] = 5.43;
84     map<int, double>::iterator mit;
85     for (mit = m.begin(); mit != m.end(); ++mit)
86     {
87         printf("key = %d,value = %f\n", mit->first,(*mit).second);
88     }
89     return 0;
90 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!