知识点
unordered_map:
unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的。
优点: 因为内部实现了哈希表,因此其查找速度非常的快
缺点: 哈希表的建立比较耗费时间
适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map
-
查找用哈希表,时复 $O(1)$
-
注意是
unordered_map<string, vector<int> >
要用vector,因为学生的选课数是不确定的,所以得用变长数组 -
记得sort
-
声明变量时写&,这样就直接引用过来而不是复制一遍(没写&在pat最后一个数据被卡了hh)
#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;
unordered_map<string, vector<int>> students;
int main()
{
int n, k;
cin >> n >> k;
while(k -- )
{
int id, m;
cin >> id >> m;
while(m -- )
{
string name;
cin >> name;
students[name].push_back(id);
}
}
while(n -- )
{
string name;
cin >> name;
auto &ls = students[name];
cout << name << ' ' << ls.size();
sort(ls.begin(), ls.end());
for (auto &l : ls) cout << ' ' << l;
cout << endl;
}
return 0;
}
我用map超时了,多亏你的题解提醒我,感谢