1.在使用mp[key]的时候它会去找键值为key的项,假设没有,他会自己主动加入一个key的项,再把value赋值为对应的初始值(value是int的话赋值为0,string的话赋值为空)。所以假设是插入的话能够用insert。假设是查找的话能够使用find。这样能够节省开销。
查找的时间复杂度为O(logn)
2.
代码:
#include<iostream> #include<string> #include<map> using namespace std; string word[50005]; map<string,int> mp;//用平衡二叉树实现的,按key从小到大排 int main() { int i=0; //printf("%d ",k.max_size());用来看容器的容量 while(cin>>word[i++])//用ctrl+z然后enter结束循环 { mp[word[i-1]]=1;//mp[]中的[]已重载,注意是i-1啊啊!!。!。! } map<string,int>::iterator it; for(it=mp.begin(); it!=mp.end(); it++) { string w=it->first; for(i=1; i<w.length()-1; i++) { string w1(w,0,i);//复制[0,i) string w2(w,i);//从w的i位置開始复制 if(mp.find(w1)!=mp.end()&&mp.find(w2)!=mp.end()) { cout<<w<<endl; break; } } } return 0; }