從上次的思路,換到容器去碼代碼,真的沒有頭緒,讓人茫然失措,有點無所適從的感覺,看了各路神仙的講解,都不是那麼詳細,有些小的方面沒有提到,很難受,只能看着他們的文章,視頻。一點一點的摸索。
重要的一點 各大網站不認strlwr(),只能用tolower;
或者 transform(strA.begin(), strA.end(), strA.begin(), ::tolower)
今天的知識點
迭代器
類型iterator 名稱 ps:map<string,string>::iterator;
Typef map<char,string> cx; cx::iterator;
Map指向value跟key mp->second mp->first;
輸出迭代器所指向的要用 *p;
結構體插入map mp.insert(make_pair(ax.a,ax.b));
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
struct cx{
string a; //定義一個結構體,重點不是放什麼,而是爲了對應map容器;
string b;
};
typedef multimap<string,string>dx; //dx代表前面的一長串
dx mp; //上面那一長串的類型的mp
cx ax; //cx數據類型的ax
char d[30]; //爲了轉換大小的過度字符串
set<string> ap;最後排序Value用的容器
int main()
{
string c;
while(cin>>c)
{
memset(d,0,sizeof(char)*30); //數組清零
if(c=="#") break;
ax.b=c;
for(int i=0;i<c.size();i++)
{
d[i]=tolower(c[i]); //換成小寫
}
//c=strlwr(d);
sort(d,d+c.size()); //將單詞按照字典序排序
ax.a=d;
mp.insert(make_pair(ax.a,ax.b)); //插入multimap,a做key,b做value
}
dx::iterator p;
dx::iterator q;
for(p=mp.begin();p!=mp.end();++p)
{
q=++p;
p--; //這裏查了相關資料沒有找到可以指向迭代器下一位的方法;
if(p->first==q->first)
{
mp.erase(p->first); //eraser()函數回去掉所有value等與p->的value;
p=mp.begin();
}
}
for(p=mp.begin();p!=mp.end();++p)
{
ap.insert(p->second); //將value插入set容器
}
for(set<string>::iterator c=ap.begin();c!=ap.end();c++)
{
cout<<*c<<endl; //迭代輸出
}
return 0;
}