/*
map:里面存在唯一的K-V;底层结构:红黑树
x:查找次数
N:数据总量
2^x>=N;查找非常方便,以为插入时,涉及到了排序。
multimap:可以存在多个相同的K-V;
set:键值和实值属于同一个值,存入了实值之后,会转换为键值,不允许重复
multiset:相对于set,是允许重复
*/
#include"iostream"
#include"map"
#include"algorithm"
#include"functional"
using namespace std;
void fun(pair<int,char> pr){
cout<<pr.first<<pr.second<<endl;
}
void MapConstruct(){
typedef pair<int,char> ins_pair;
map<int,char> map1;
//这个点比较关键:表示map的insert返回结果
//一个值是迭代器,一个值bool
//bool的输出:pr.second;
//迭代器的输出:(*pr.first).first,(*pr.first).second
//迭代器本身是一个地址指针
pair<map<int,char>::iterator,bool> pr;
map1.insert(pair<int,char>(1,'a'));
pr = map1.insert(ins_pair(2,'b'));
cout<<pr.second<<".............."<<( *pr.first).first<< (*pr.first).second<<endl;
//ins_pair a = *(pr.first);
//cout<<a.first<<a.second<<endl;
pr = map1.insert(ins_pair(2,'b'));
map1.insert(ins_pair(8,'b'));
map1.insert(ins_pair(7,'b')) ;
map1.insert(ins_pair(5,'b'));
map1.insert(ins_pair(13,'b'));
map<int,char>::iterator ite1 = map1.begin();
ite1++;
ite1++;
ite1++;
ite1++;
map1.insert(ins_pair(12,'b'));
for_each(map1.begin(),map1.end(),fun);
cout<<"....................."<<endl;
map<int,char> map2;
map2.insert(ins_pair(20,'c'));
map2.insert(map1.begin(),map1.end());
for_each(map2.begin(),map2.end(),fun);
}
void MapOther(){
typedef pair<int,char> input_pair;
map<int,char> map1;
map1.insert(input_pair(1,'a'));
map1.insert(input_pair(2,'b'));
map1.insert(input_pair(3,'c'));
map1.insert(input_pair(4,'d'));
map1.insert(input_pair(5,'e'));
map1.insert(input_pair(6,'f'));
cout<<map1.size()<<endl;
//判断键值是否存在,填写key
cout<<map1.count(5)<<endl;
cout<<map1.empty()<<endl;
map<int,char>::iterator ite1;
ite1 = map1.begin();
for(ite1;ite1!=map1.end();ite1++){
cout<<ite1->first<<ite1->second<<endl;
}
}
/*
增:insert
删:erase,clear
改:find(key) 返回迭代器
查:for_each
map 不允许修改键值
容器.end()永远指向元素的下一个位置
*/
void MapDelete(){
typedef pair<int ,char> input_pair;
map<int,char>map1;
map1.insert(input_pair(1,'a'));
map1.insert(input_pair(2,'b'));
map1.insert(input_pair(3,'c'));
map1.insert(input_pair(4,'d'));
map1.insert(input_pair(5,'e'));
map<int,char>::iterator ite1;
ite1 = map1.begin();
ite1++;
ite1++;
//根据迭代器的location
//map1.erase(ite1);
map1.erase(ite1++,map1.end());//根据迭代器的location
map1.erase(1);//根据key 来删除
ite1 = map1.begin();
for(ite1;ite1!=map1.end();ite1++){
cout<<ite1->first<<ite1->second<<endl;
}
map<int,char>map2;
map2.insert(input_pair(1,'a'));
map2.insert(input_pair(2,'b'));
map2.insert(input_pair(3,'c'));
map2.insert(input_pair(4,'d'));
map2.insert(input_pair(5,'e'));
map<int,char>::iterator ite2 = map2.find(1);
cout<<ite2->first<<ite2->second<<endl;
//容器.end()永远指向元素的下一个位置
if(map2.find(100)==map2.end()){
cout<<"ok"<<endl;
}
cout<<ite2->first<<ite2->second<<endl;
//map默认从小到大排序,这个更改看如何更改排序的方式
cout<<"............................"<<endl;
map<int,char,greater<int>> map3;
map<int,char,greater<int>>::iterator ite3;
map3.insert(input_pair(1,'a'));
map3.insert(input_pair(2,'b'));
map3.insert(input_pair(3,'c'));
map3.insert(input_pair(41,'d'));
map3.insert(input_pair(25,'e'));
map3.insert(input_pair(13,'f'));
ite3 = map3.begin();
for(ite3;ite3!=map3.end();ite3++){
cout<<ite3->first<<ite3->second<<endl;
}
cout<<"...........lower_bound................."<<endl;
ite3 = map3.lower_bound(12);
cout<<ite3->first<<ite3->second<<endl;
cout<<"...........upper_bound................."<<endl;
ite3 = map3.upper_bound(12);
cout<<ite3->first<<ite3->second<<endl;
/*
lower_bound(key)返回一个迭代器
当排序方式为:从小到大,指向map中键值>=key的第一个元素
当排序方式为:从大到小,指向map中键值<=key的第一个元素
upper_bound(key)返回一个迭代器
当排序方式为:从小到大,指向map中键值>key的第一个元素。
当排序方式为:从大到小,指向map中键值<key的第一个元素。
*/
cout<<"............................"<<endl;
map<int,char> map4;
map<int,char>::iterator ite4;
map4.insert(input_pair(1,'a'));
map4.insert(input_pair(2,'b'));
map4.insert(input_pair(3,'c'));
map4.insert(input_pair(41,'d'));
map4.insert(input_pair(25,'e'));
map4.insert(input_pair(13,'f'));
ite4 = map4.begin();
for(ite4;ite4!=map4.end();ite4++){
cout<<ite4->first<<ite4->second<<endl;
}
cout<<"...........lower_bound................."<<endl;
ite4 = map4.lower_bound(12);
cout<<ite4->first<<ite4->second<<endl;
cout<<"...........upper_bound................."<<endl;
ite4 = map4.upper_bound(12);
cout<<ite4->first<<ite4->second<<endl;
}
void MultiMapConstruct(){
typedef pair<int,char> input_pair;
multimap<int,char> multimap1;
multimap1.insert(input_pair(1,'a'));
multimap1.insert(input_pair(1,'a'));
multimap1.insert(input_pair(2,'b'));
multimap1.insert(input_pair(3,'b'));
multimap1.insert(input_pair(4,'c'));
multimap1.insert(input_pair(5,'d'));
multimap1.insert(input_pair(5,'e'));
multimap<int,char>::iterator ite1;
ite1 = multimap1.begin();
for(ite1;ite1!=multimap1.end();ite1++){
cout<<ite1->first<<ite1->second<<endl;
}
int count = multimap1.count(5);
cout<<count<<endl;
ite1 = multimap1.find(5);
cout<<ite1->first<<ite1->second<<endl;
}
int main(){
//MapOther();
//MapDelete();
//MapConstruct();
MultiMapConstruct();
system("pause");
return 0;
}
STL——map程序
猜你喜欢
转载自blog.csdn.net/ChaoFeiLi/article/details/103146840
今日推荐
周排行