1、map 查找 可以通过[]进行查找
1.示例:
#include <iostream>
#include <string>
#include <map>using namespace std;
int main()
{
map<string, int> m;
//关联容器的形式
m.insert(pair<string, int>("ming",18));//不可能插入重复的key,再次插入相同key的pair对象,无法插入
//通过[]形式
m["ming1"] = 20;//如果[]中的key不存在,插入;如果[]中的key已经存在,那么修改valueint v = m["ming1"];//通过key查找value
cout << v <<endl;
}
/*
输出:
20
*/
2.示例:count("ming")函数,count查找该key (key是“ming”) 出现的次数,返回值可能是0或者1
0表示没有该key,1表示有而且数量就是1#include <iostream>
#include <string>
#include <map>using namespace std;
int main(){
map<string, int> m;
//关联容器的形式
m.insert(pair<string, int>("ming",18));
cout<<m.count("ming")<<endl;//1
cout<<m.count("H")<<endl;//0
}
/*
输出:
1
0
*/注意:是否会新建对象:
m["aaa"] = 6;//会 aaa,6
cout<< m["bbb"]<<endl; // 会 bbb,0
cout<< m.count("bbb")<<endl;// 不会新建//有 ,返回1, 不新建
3.示例:find()函数进行查找,find返回该key的迭代器对象
#include <iostream>
#include <string>
#include <map>using namespace std;
int main(){
map<string, int> m;
//关联容器的形式
m.insert(pair<string, int>("ming",18));
map<string, int>::iterator iter = m.find("ming");//find返回该key的迭代器对象(迭代器指针)
if(iter != m.end())
{
cout<<iter->first<<" "<<iter->second<<endl;
}
else
{
cout<<"not.."<<endl;
}
}
/*
输出:
ming 18
*/
2、map 删除
4.map 删除
从m中删除key为k的元素 m.erase(k)int main()
{
pair<string,int> p("aa",12);map<string,int> m;
m.insert(pair<string,int>("xiao",16));
m.insert(pair<string, int>("jack", 18));
m["aaa"] = 6;//会新建cout<<m["bbb"]<<endl;//会
//删除key值为aaa的元素
m.erase("aaa");for(map<string,int>::iterator iter = m.begin();iter != m.end();iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}return 0;
}
/*
输出:
0
bbb 0
jack 18
xiao 16
*/示例2:删除 从m中删除迭代器p指定的元素 m.erase(p)
int main()
{
map<string,int> m;
m.insert(pair<string,int>("xiao",16));
m.insert(pair<string, int>("jack", 18));
m.insert(pair<string, int>("rose", 1));
m.insert(pair<string, int>("tom", 2));
m.insert(pair<string, int>("jerry", 3));m["aaa"] = 6;
map<string,int>::iterator iter = m.find("tom");
//通过迭代器删除
m.erase(iter);for(map<string,int>::iterator iter = m.begin();iter != m.end();iter++ )
{
cout<<iter->first<<" "<<iter->second<<endl;
}return 0;
}
/*
输出:
aaa 6
jack 18
jerry 3
rose 1
xiao 16
*/
5.map自定义key类型
需要重载运算符 < 并定义常函数(函数定义为const函数后被调用)
示例:
#include <iostream>
#include <map>
#include <string>using namespace std;
//自定义key类型
class Person
{
public:
Person(const char* name):name(name)//隐式转换, "xxxx"的返回值是char*, 不用string类型
{
}
//数据排序定义
bool operator<(const Person& other) const //常函数
{
return name < other.name;
}
string getName() const
{
return name;
}
private:
string name;
};int main()
{
map<Person, int> m;
m.insert(pair<Person, int>(Person("jack"), 18));
m.insert(pair<Person, int>("rose", 1));//隐式转换
m.insert(pair<Person, int>("tom", 2));
m.insert(pair<Person, int>("jerry", 3));
for(map<Person, int>::iterator iter = m.begin();iter != m.end();iter++)
{
cout<<iter->first.getName()<<" "<<iter->second<<endl;
//iter->first.getName()调用常函数
}
return 0;
}
/*
输出:
jack 18
jerry 3
rose 1
tom 2
*/