题目链接:点击打开链接
第一次使用unordered_map,有些情况比map效率高很多,特此记录
我的
#include <iostream>
#include <stdio.h>
#include <unordered_map>
#include <map>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
int cnt = 1;
unordered_map<string,int> str;
char s[15];
for(int i = 1; i <= n; i++)
{
scanf("%s",s);
if(str.find(s) == str.end())
str[s] = cnt++;
printf("%d\n",str[s]);
}
}
return 0;
}
#include<unordered_map>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
struct hash_func
{
size_t operator()(char * const &a)const
{
size_t res = 0;
for (char *s = a; *s; s++) res = res * 131 + *s;
return res;
}
};
struct equal_func
{
bool operator()(char * const &a, char * const &b)const
{
return strcmp(a, b) == 0;
}
};
int main()
{
int n;
while (~scanf("%d", &n))
{
unordered_map<char *, int, hash_func, equal_func> m;
int cnt = 1;
while (n--)
{
char *s;
s = new char[11];
scanf("%s", s);
if (m.find(s) == m.end()) m[s] = cnt++;
printf("%d\n", m[s]);
}
for (auto &i : m) delete[] i.first;
}
}