关联容器 map
map是一种关联容器,特点是增加删除比较方便
直接看如何使用吧:
首先引入头文件
#include <map>
就像 string str = "abc" 一样我们如何用map声明一个变量然后给他赋值
map<int, string> mymap;
这里 int 是键,string 是键值。
也就是通过 int 可以索引找到string
那么如何向这个map中增添数据呢?
第一种方法:
使用 inset 函数插入 pair
#include <map> #include <string> #include <iostream> using namespace std; int main() { map<int, string> Mymap; //添加三个新元素 Mymap.insert(pair<int, string>(1, "xiaohong")); Mymap.insert(pair<int, string>(2, "xiaolan")); Mymap.insert(pair<int, string>(3, "xiaolv")); //使用迭代器遍历 map<int, string>::iterator iter; for(iter = Mymap.begin(); iter != Mymap.end(); iter++) { cout<<iter->first<<' '<<iter->second<<endl; }
return 0; }
第二种方法:
使用 insert 插入 value_type 数据
int main() { map<int, string> Mymap; //添加三个新元素 Mymap.insert(map<int, string>::value_type(1, "xiaohong")); Mymap.insert(map<int, string>::value_type(2, "xiaolan")); Mymap.insert(map<int, string>::value_type(3, "xiaolv")); //使用迭代器遍历 map<int, string>::iterator iter; for(iter = Mymap.begin(); iter != Mymap.end(); iter++) { cout<<iter->first<<' '<<iter->second<<endl; }
return 0; }
第三种方法:
数组
int main() { map<int, string> Mymap; //添加三个新元素 Mymap[1] = "xiaohong"; Mymap[2] = "xiaolan"; Mymap[3] = "xiaolv"; //使用迭代器遍历 map<int, string>::iterator iter; for(iter = Mymap.begin(); iter != Mymap.end(); iter++) { cout<<iter->first<<' '<<iter->second<<endl; }
return 0; }
判断是否插入成功
int main() { map<int, string> Mymap; //pair有两个变量,第一个是一个map容器,第二个是bool类型的值通过这个变量即可判断是否插入成功 pair<map<int,string>::iterator,bool> Insert_Pair; //添加一个元素,并用Insert_Pair获取返回值 Insert_Pair = Mymap.insert(pair<int, string>(1, "xiaohong")); if(Insert_Pair.second == true) cout<<"Insert Successfully"<<endl; else cout<<"Insert Failure"<<endl; //使用迭代器遍历 map<int, string>::iterator iter; for(iter = Mymap.begin(); iter != Mymap.end(); iter++) { cout<<iter->first<<' '<<iter->second<<endl; }
return 0; }
遍历
除了用迭代器之外也可以用数组的方式遍历
int main() { map<int, string> Mymap; Mymap.insert(map<int, string>::value_type(1, "xiaohong")); Mymap.insert(map<int, string>::value_type(2, "xiaolan")); Mymap.insert(map<int, string>::value_type(3, "xiaolv")); for(int nindex = 1; nindex <= Mymap.size(); nindex++) { cout<<Mymap[nindex]<<endl; }
return 0; }
查找
find 根据键查找键值,如果成功找到则返回待找的键位置,如果找不到返回end()位置
int main() { map<int, string> Mymap; Mymap.insert(map<int, string>::value_type(1, "xiaohong")); Mymap.insert(map<int, string>::value_type(2, "xiaolan")); Mymap.insert(map<int, string>::value_type(3, "xiaolv")); //迭代器 map<int, string>::iterator iter; //查找键为2的值 iter = Mymap.find(2); if (iter != Mymap.end()) { cout<<"find the value is : "<<iter->second<<endl; } else { cout<<"do not find "<<endl; } return 0; }
删除
使用迭代器删除
这里我将打印封起来
#include <map> #include <string> #include <iostream> #include <string> using namespace std; void printf_map(map<int,string> Mymap) { cout << "---------------------"<<endl; map<int, string>::iterator iter; for(iter = Mymap.begin(); iter != Mymap.end(); iter++) { cout<<iter->first<<' '<<iter->second<<endl; } cout << "---------------------"<<endl; } int main() { map<int, string> Mymap; Mymap.insert(map<int, string>::value_type(1, "xiaohong")); Mymap.insert(map<int, string>::value_type(2, "xiaolan")); Mymap.insert(map<int, string>::value_type(3, "xiaolv")); printf_map(Mymap); //使用迭代器删除第一个元素 map<int, string>::iterator eraiter; eraiter = Mymap.find(1); Mymap.erase(eraiter); printf_map(Mymap); return 0; }
输出结果如下:
--------------------- 1 xiaohong 2 xiaolan 3 xiaolv --------------------- --------------------- 2 xiaolan 3 xiaolv ---------------------
通过关键字删除
int main() { map<int, string> Mymap; Mymap.insert(map<int, string>::value_type(1, "xiaohong")); Mymap.insert(map<int, string>::value_type(2, "xiaolan")); Mymap.insert(map<int, string>::value_type(3, "xiaolv")); printf_map(Mymap); //使用迭代器删除第一个元素 int n = Mymap.erase(1); printf_map(Mymap); return 0; }
输出结果和刚才一样
范围删除
int main() { map<int, string> Mymap; Mymap.insert(map<int, string>::value_type(1, "xiaohong")); Mymap.insert(map<int, string>::value_type(2, "xiaolan")); Mymap.insert(map<int, string>::value_type(3, "xiaolv")); printf_map(Mymap); //使用迭代器删除一段元素 Mymap.erase(Mymap.begin(),Mymap.end()); printf_map(Mymap); return 0; }
输出:
--------------------- 1 xiaohong 2 xiaolan 3 xiaolv --------------------- --------------------- ---------------------
没了,什么都没了。。
常用函数
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数