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;
}
posted @ 2019-02-23 00:12  风骨散人  阅读(81)  评论(0编辑  收藏  举报