map函数使用
#include<cstdio>
#include<map>
#include<iostream>
#include<string>
#include<utility>
using namespace std;
map<int,string> asd;//建立映射关系
// int ->key string ->value
//map是基于key为关键字排序的
/*
map的基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
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
// map中的swap不是一个容器中的元素交换,而是两个容器所有元素的交换。
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
*/
int main()
{
int n;
scanf("%d",&n);
string name;
int mark;
while(n--)
{
cin>>mark>>name;
asd.insert(pair<int,string>(mark,name));
//利用 pair 输入
// asd.insert(map<string,int>::value_type(name,mark));
//利用 value_type 输入
}
int nSize=asd.size();
cout<<nSize<<endl;//输出这个 map 的大小
// map 的两种遍历方式
for(map<int,string>::iterator it=asd.begin();it!=asd.end();it++)
cout<<it->first<<" "<<it->second<<endl;//使用迭代器进行遍历
// for(map<int,string>::reverse_iterator it=asd.rbegin();it!=asd.rend();it++)
// cout<<it->first<<" "<<it->second<<endl;//利用反向迭代器进行遍历
//利用 map 自带的成员函数 find() 进行查找 时间复杂度:log n
map<int,string>::iterator iter;
iter=asd.find(3);//查找 key 值为3的数
if(iter!=asd.end())
cout<<"Find, the value is "<<iter->second<<endl<<endl;
else cout<<"Do not Find"<<endl<<endl;
//利用 map 自带成员函数 erase 来移除项目
// iterator erase(iterator it);//通过一个条目对象删除
// map<int,string>::iterator it=asd.find(1);
// asd.erase(it);
//如果删除了会返回1,否则返回0
// iterator erase(iterator first,iterator last)//删除一个范围
// 目前就会这一种方法,希望以后还能找到一个更简单的
/* int space=0;
for(map<int,string>::iterator it=asd.begin();it!=asd.end();)
{
++space;
if(it->first==space) asd.erase(it++);
else ++it;
// if(space==3) break;
}
*/
// size_type erase(const Key&key);//通过关键字删除
// asd.erase(1);
// clear()就相当于enumMap.erase(enumMap.begin(),enumMap.end());
// asd.erase(asd.begin(),asd.end());
// 或者
// asd.clear();
// for(map<int,string>::iterator it=asd.begin();it!=asd.end();it++)
// cout<<it->first<<" "<<it->second<<endl;//使用迭代器进行遍历
// map中lower_bound()和upper_bound()的使用
// map<int,string>::iterator lower,upper;
// lower=asd.lower_bound(val);
// upper=asd.upper_bound(val);
// printf("%d %d",lower->second,upper->second);
return 0;
}
先更新到这里,以后有什么新的算法再做补充