2019/02/22关于上文的题解
从上次的思路,换到容器去码代码,真的没有头绪,让人茫然失措,有点无所适从的感觉,看了各路神仙的讲解,都不是那么详细,有些小的方面没有提到,很难受,只能看着他们的文章,视频。一点一点的摸索。
重要的一点 各大网站不认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;
}