3,882
社区成员
发帖
与我相关
我的任务
分享
应该是map的一种,但hash_map表具体怎么建也应该是有讲究的
这个是在这样一种前提下使用的:
有n个字符串(这个n是一个确定的,不会再变的,每个字符串都不会相同,这个表是一次建立,超多次使用),他们是以链表的形式存放的,在字符串查找时,如果直接用链接枚举的话,那如果n很大,这个时间复杂度太高。
可是如果我把这个表按每个字符串的一种特征整理一次,存储到一个数组中,在以后每次使用时直接用这个特征找到相应的数组位置并取值,这将会是一种极高效的处理方法。
这里有两个要求:1、这个特征的计算必须是以n为参数的,所以特征值最大只能为n-1
2、特征的计算时间复杂度不能太高,如果时间复杂度过高的话,就没有使用的意义了
[/quote]
sorry,不知道那个小贱图是怎么加上去的~
应该是map的一种,但hash_map表具体怎么建也应该是有讲究的
这个是在这样一种前提下使用的:
有n个字符串(这个n是一个确定的,不会再变的,每个字符串都不会相同,这个表是一次建立,超多次使用),他们是以链表的形式存放的,在字符串查找时,如果直接用链接枚举的话,那如果n很大,这个时间复杂度太高。
可是如果我把这个表按每个字符串的一种特征整理一次,存储到一个数组中,在以后每次使用时直接用这个特征找到相应的数组位置并取值,这将会是一种极高效的处理方法。
这里有两个要求:1、这个特征的计算必须是以n为参数的,所以特征值最大只能为n-1
2、特征的计算时间复杂度不能太高,如果时间复杂度过高的话,就没有使用的意义了
#pragma warning(disable:4786)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main () {
wstring ws1,ws2;
wcin.imbue(locale("chs"));
wcout.imbue(locale("chs"));
getline(wcin,ws1);
getline(wcin,ws2);
if (ws1.size()!=ws2.size()) {
wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
return 1;
}
map<wchar_t,wchar_t> m1,m2;
int n=ws1.size();
for (int i=0;i<n;i++) {
if (m1.find(ws1[i])==m1.end() && m2.find(ws2[i])==m2.end()) {
m1[ws1[i]]=ws2[i];
m2[ws2[i]]=ws1[i];
} else {
if (m1[ws1[i]]!=ws2[i] || m2[ws2[i]]!=ws1[i]) {
wcout<<ws1<<L" 和 "<<ws2<<L" 不对应"<<endl;
return 1;
}
}
}
wcout<<ws1<<L" 和 "<<ws2<<L" 对应"<<endl;
return 0;
}