2017-08-21 15:42:01
writer:pprp
除了用到map以外,输入也是一个问题
用到了sscanf详情请看上一篇博客
/* theme:第一章 - 分治算法 name: POJ 2503 writer:pprp description:详情请见poj 2503 date:Monday 2017/8/21 */ #include <bits/stdc++.h> using namespace std; map<string, string> mp; char ch1[20], ch2[20], ch3[40], tmpch[20]; int main() { while(gets(ch3)) { if(strlen(ch3) == 0) break; sscanf(ch3,"%s %s",ch1,ch2); mp.insert(make_pair(ch2,ch1)); } // map<string,string> ::iterator ii; // for(ii = mp.begin(); ii != mp.end() ; ii++) // { // cout << ii->first << " " << ii->second << endl; // } while(gets(tmpch)) { bool tag = 0; map<string, string> :: iterator it; it = mp.find(tmpch); if(it != mp.end()) { cout << mp[tmpch] << endl; } else { cout << "eh" << endl; } } return 0; }
之前我写的错误的代码:
插入以后遍历,发现只读出最后一个
map<key,value>mp
key不建议是char*指针,
map内部是一个红黑树,
比较key的时候比较的是char*一个地址,而不是他指向的字符串
所以要这样用
struct ptrCmp { bool operator()( const char * s1, const char * s2 ) const { return strcmp( s1, s2 ) < 0; } }; map<const char*,const char*,ptrCmp> mp;
我测试了一下,没有用好,希望有大佬能给我展示可以用的代码;