map容器

map容器的基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
//
// Created by Jason on 2020/3/29.
//
/*
* 3821map构造函数
p<T1,T2> maptTT;//map默认构造函数:
p( const map &mp):/贝构造函数
* 3822map赋值操作
map& operator=(const map&mp)://重载等号操作符
swap(mp)://交换两个集合容器
* 3823map大小操作
size();//返回容器中元素的数目
empty();//判断容器是否为空
* 3824map插入数据元素操作
map.insert(,,,)://往容器插入元素,返回 pair <iterator,bool>
map<int, string> mapStu
/第一种通过pair的方式插入对象
mapStu insert(pair<irt, string>(3,"小张"));
/第二种通过pair的方式插入对象
mapStu insert( make_pair(-1,“校长”));
/第三种通过 value type的方式插入对象
mapStu insert(map <int, string>::value_type(1, "小李));
/第四种通过数组的方式插入值
mapStu[3] = "小刘";
mapStu[5]=“小王";
* 3825map删除操作
clear ();//删除所有元素
erase(pos):/刪除pos迭代器所指的元素,返回下一个元素的迭代器。4
erase(beg,end);/删刪除区间[beg,md的所有元素,返回下一个元素的迭代器。
erase (keyElem)://删除容器中key为keyE1em的对组
* 3826map查找操作
find (key):/查找键key是否存在,着存在,返回该键的元素的迭代器;/若不存在,返回map.end()
count (keyElem);//返回容器中key为 keyElem的对组个数。对map来说,要么是0,要么是1。对
multimap来说,值可能大于1。
lower_bound (keyElem)://回第一个key>=KeyElem型m元素的迭代器。4e
upper_bound (keyElem):/回第一个key>keyElem元素的迭代器。
equal_range(keyElem):/返回吝器中key与keE1m相等的上下限的两个迭代器
* */
#include<bits/stdc++.h>
using namespace std;
void test01()
{
map<int,int> m;
//插入方式
//第一种
m.insert(pair<int,int>(1,10));
//第二种
m.insert(make_pair(2,20));
//第三种
m.insert(map<int,int>::value_type(3,30));

m[4]=40;
//不建议用m[]= 进行赋值,除非进行访问操作,否则一旦误操作,会创建一个不存在的节点
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"KEY = "<<it->first<<" VALUE = "<<it->second<<endl;
}
}
void test02()
{
map<int,int> m;
m.insert(pair<int,int>(1,10));
m.insert(make_pair(2,20));
m.insert(map<int,int>::value_type(3,30));
m[4] = 40;
m.erase(3);//key = 3 的被删除了

for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"KEY = "<<it->first<<" VALUE = "<<it->second<<endl;
}
}
class Mycompare
{
public:
bool operator()(int v1,int v2)
{
return v1>v2;
}
};
void test03()
{
map<int,int > m;
m.insert(pair<int,int>(1,10));
m.insert(make_pair(2,20));
m.insert(map<int,int>::value_type(3,30));
m[4] = 40;

//查找
map<int,int>::iterator pos = m.find(3);
if(pos!=m.end())
{
cout<<" GOT IT key = "<<(*pos).first<<"VALUE IS "<<(*pos).second<<endl;
}
int cnt = m.count(4);
cout<<"KET IS 4 ="<<cnt<<endl;
/* lower_bound(keyElem)*/
map<int,int>::iterator ret = m.lower_bound(3);
if(ret!=m.end())
{
cout<<"GOT IT! THE lower_bound 's key is :"<<ret->first<<" VALUE IS "<<ret->second<<endl;
} else
cout<<"SORRY NOT FOUND"<<endl;

/*upper_bound*/
ret = m.upper_bound(3);
if(ret!=m.end())
{
cout<<"GOT IT! THE upper_bound 's key is :"<<ret->first<<" VALUE IS "<<ret->second<<endl;
} else
cout<<"SORRY NOT FOUND"<<endl;
/*equal_range */
pair<map<int,int>::iterator ,map<int,int>::iterator>it2 = m.equal_range(3);
if(it2.first!=m.end())
{
cout<<"GOT IT! THE lower_bound 's key is :"<<it2.first->first<<" VALUE IS "<<it2.first->second<<endl;
} else
{
cout<<"SORRY NOT FOUND"<<endl;
}
if(it2.second!=m.end())
{
cout<<"GOT IT! THE lower_bound 's key is :"<<it2.second->first<<" VALUE IS "<<it2.second->second<<endl;
} else
cout<<"SORRY NOT FOUND"<<endl;
}
void test04()
{
map<int,int,Mycompare> m;//有大变小
m.insert(pair<int,int>(1,10));
m.insert(make_pair(2,20));
m.insert(map<int,int>::value_type(3,30));
m[4] = 40;
for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
{
cout<<"KEY = "<<it->first<<" VALUE = "<<it->second<<endl;
}
}
int main()
{
// test02();
// test01();
// test03();
test04();
return 0;
}
-------------本文结束,感谢您的阅读-------------