可以给结构体,向量(vector),列表等进行排序
参数为(首地址,首地址+元素个数,cmp)
cmp可以自定义给对应的比较函数,默认为升序,要想该如下:
//改成降序仅需要如下代码,sort(a[0],a[0]+10,cmp)
bool cmp(int a,int b)
{
return a>b;
}
当使用STL时,如果使用a.find()函数,如果在查找范围内不存在,返回a.end(),这里需要注意的是,a.end()不在查找范围内。
//通常的用法:用于判断循环边界
while(a.find(c)!=end)
{
//进入循环
}
使用vector开结构体时,需要resize()特定大小,不然会卡住,可能是内存占用过多的缘故
如果直接使用
- vector<int> a
- a[i]=1;
则应制定a的大小,指定方式为
- 1.方法一:vector<int> a(k);
- 2.方法二:a.resize(n);
如果使用时为:
a.push_back(1);
则不用指定大小
map类型为从任意一种基本类型映射到任意一种基本类型的类型键值对的字典集合。最常见的映射关系为int 到int 的数组: 如a[0] = 500。
如果该键不存在,默认的值初始化为0
定义类型:
//定义类型如:
map<string set<int> a
//访问元素,使用对应的迭代器实现:
map<string set<int> :: iterator it;
key = it-->first;
value = it-->second;
先进先出的一个容器。
queue.push()
将数据放入
queue.pop()
弹出队首数据
queue.front()
表示队首元素
queue.back()
表示队尾元素
set类型为内部自动有序,且不含重复元素的集合。在代码中使用可以自动排序降低思维量。
set类型操作:
//插入数据: yes 66 77 insert用法为set类型的函数
a[yes].insert(66);
a[yes].insert(77);
//set的访问只能通过迭代器的形式:
set<int> :: iterator it;
//常用在循环取出对应的值:
for(set<int>:: iterator it==a.begin();it!=a.end();it++)
//不能使用it
printf("%d", *it);
str.c_str()
与const char 相互转换str.substr(i1,i2)
:截取从i1
开始的,长度为i2
的字串#include
#include
#include
#include
#include
using namespace std;
map<string, set<int> > title, auther, keys, publisher, years;
int n,id,m,chose;
void query(map<string, set<int> > &m, string &temp)
{
if(m.find(temp)!=m.end())
{
for(set<int>::iterator it=m[temp].begin();it!=m[temp].end();it++)
printf("%07d\n",*it);
}
else printf("Not Found\n");
}
int main()
{
scanf("%d", &n);
string ti,au,ke, pu,ye;
for(int i=0;i<n;i++)
{
scanf("%d\n", &id);
getline(cin, ti);
title[ti].insert(id);
getline(cin,au);
auther[au].insert(id);
while(cin>>ke)
{
keys[ke].insert(id);
char c=getchar();
if(c=='\n')
break;
}
getline(cin, pu);
publisher[pu].insert(id);
getline(cin, ye);
years[ye].insert(id);
//cout<
}
scanf("%d", &m);
for(int i=0;i<m;i++)
{
scanf("%d: ",&chose);
string temp;
getline(cin,temp);
cout<<chose<<": "<<temp<<endl;
if(chose==1)query(title,temp);
else if(chose==2) query(auther,temp);
else if(chose==3) query(keys,temp);
else if(chose==4) query(publisher,temp);
else if(chose==5) query(years,temp);
}
return 0;
}