Map基本用法
Map的基本用法
map内部使用的是红黑树,在map内部所有的数据都是有序的
map插入有三种方法:
insert(pair<int,string>(i,str));
myMap.insert(map<int,string>::value_type(i,str));
myMap[2] = "a";
map遍历也有三种方法
迭代器
数组
反向迭代器
map删除数据使用erase函数,可以:
用关键字某个元素
迭代器删除某个元素
迭代器删除某片元素
map查找有三个元素
find
Lower_bound
Upper_bound
实例代码详解
#include "stdafx.h"
#include <map>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
map<int,string>myMap;
string str;
//******************************************************************
for (int i = 0; i < 4;i++)
{
cin>>str;
//map插入有三种方式
//下面两种插入方式基本等同
//map的关键字是唯一的,重复的话插入会失败
//myMap.insert(pair<int,string>(i,str));
//myMap.insert(map<int,string>::value_type(i,str));
//检测插入失败的方法
//下面pair的第一个变量返回的是map的迭代器(即你插入的map值),第二个是如果插入成功就是true,否则为false
pair<map<int,string>::iterator,bool> insert_pair;
insert_pair = myMap.insert(pair<int,string>(i,str));
if (insert_pair.second == true)
{
cout<<insert_pair.first->first<<endl;
}
//还有一种就是数组方式插入,此时如果插入重复的话,后面的值会覆盖前面的
//cout<<"\n用数组的方式插入第一个map元素的重复值覆盖"<<endl;
myMap[0] = "a";
myMap[0] = "b";
}
//******************************************************************
//map的遍历
//迭代器遍历
map<int,string>::iterator iter;
cout<<"\n迭代器遍历\n"<<endl;
for (iter = myMap.begin();iter != myMap.end();iter++)
{
cout<<iter->first<<" : "<<iter->second<<endl;
}
//方向迭代器遍历
map<int,string>::reverse_iterator rev_iter;
cout<<"\n反向迭代器遍历\n"<<endl;
for (rev_iter = myMap.rbegin();rev_iter != myMap.rend();rev_iter++)
{
cout<<rev_iter->first<<" : "<<rev_iter->second<<endl;
}
//用数组的方式遍历下标还是从0开始的
//输出的直接是map的值而不是关键字,全部输出要用上述方法
int nSize = myMap.size();
for (int i = 0;i < nSize;i++)
{
cout<<myMap[i]<<endl;
}
//******************************************************************
//map中三种查找数据的方法
//1.find函数找到后会返回该关键字的迭代器,否则等于end函数返回的迭代器
cout<<"\n使用find查找索引号为2的关键字\n";
iter = myMap.find(2); //find的参数时map的关键字而不是值
cout<<iter->first<<" : "<<iter->second<<endl;
//2.使用count函数只能确定某个数据在不在map中,在的话返回1,否则0
cout<<myMap.count(2)<<endl;
//第三种方法是
//Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
//Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)
//此处略去
//******************************************************************
//数据的删除
//需要用到erase函数
//用迭代器删除
myMap.erase(iter);//此时iter指向上面找到的2关键字的元素
//也可以直接用关键字删除
myMap.erase(2);
//用迭代器成片删除
myMap.erase(myMap.begin(),myMap.end());
getchar();
getchar();
return 0;
}
// STLTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <map>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
map<int,string>myMap;
string str;
//******************************************************************
for (int i = 0; i < 4;i++)
{
cin>>str;
//map插入有三种方式
//下面两种插入方式基本等同
//map的关键字是唯一的,重复的话插入会失败
//myMap.insert(pair<int,string>(i,str));
//myMap.insert(map<int,string>::value_type(i,str));
//检测插入失败的方法
//下面pair的第一个变量返回的是map的迭代器(即你插入的map值),第二个是如果插入成功就是true,否则为false
pair<map<int,string>::iterator,bool> insert_pair;
insert_pair = myMap.insert(pair<int,string>(i,str));
if (insert_pair.second == true)
{
cout<<insert_pair.first->first<<endl;
}
//还有一种就是数组方式插入,此时如果插入重复的话,后面的值会覆盖前面的
//cout<<"\n用数组的方式插入第一个map元素的重复值覆盖"<<endl;
myMap[0] = "a";
myMap[0] = "b";
}
//******************************************************************
//map的遍历
//迭代器遍历
map<int,string>::iterator iter;
cout<<"\n迭代器遍历\n"<<endl;
for (iter = myMap.begin();iter != myMap.end();iter++)
{
cout<<iter->first<<" : "<<iter->second<<endl;
}
//方向迭代器遍历
map<int,string>::reverse_iterator rev_iter;
cout<<"\n反向迭代器遍历\n"<<endl;
for (rev_iter = myMap.rbegin();rev_iter != myMap.rend();rev_iter++)
{
cout<<rev_iter->first<<" : "<<rev_iter->second<<endl;
}
//用数组的方式遍历下标还是从0开始的
//输出的直接是map的值而不是关键字,全部输出要用上述方法
int nSize = myMap.size();
for (int i = 0;i < nSize;i++)
{
cout<<myMap[i]<<endl;
}
//******************************************************************
//map中三种查找数据的方法
//1.find函数找到后会返回该关键字的迭代器,否则等于end函数返回的迭代器
cout<<"\n使用find查找索引号为2的关键字\n";
iter = myMap.find(2); //find的参数时map的关键字而不是值
cout<<iter->first<<" : "<<iter->second<<endl;
//2.使用count函数只能确定某个数据在不在map中,在的话返回1,否则0
cout<<myMap.count(2)<<endl;
//第三种方法是
//Lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
//Upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)
//此处略去
//******************************************************************
//数据的删除
//需要用到erase函数
//用迭代器删除
myMap.erase(iter);//此时iter指向上面找到的2关键字的元素
//也可以直接用关键字删除
myMap.erase(2);
//用迭代器成片删除
myMap.erase(myMap.begin(),myMap.end());
getchar();
getchar();
return 0;
}