5月18日学习总结

上节课老师教授了两种方式解决删除vector中数据排序混乱问题,下面是通过虚删的方式重新写的代码。这种方式适合数据类中有很多中数据的情况,用multimap时存vector中的下标,但是像这种通讯录只有姓名和电话号码的类,直接用的multimap就行了。

#include<bits/stdc++.h>
using namespace std;
class student
{
    string names,tel;
    int cunzai=1;//这个就是处理虚删的关键,初始为1表示存在,删除后置为0,表示已删除。
public:
    student(){}
    student(string n,string t,int c):names(n),tel(t),cunzai(c){}
    string getnames(){return names;}
    string gettel(){return tel;}
    int getcun(){return cunzai;}
    void xiugaite(string b)
    {
        tel=b;
    }
        void xiugaina(string s)
    {
        names=s;
    }
    void xiugaicun()
    {
        cunzai=0;
    }
    friend ostream& operator<<(ostream& os,const student& c);
    friend istream& operator>>(istream& is,student& c);
};
ostream& operator<<(ostream& os,const student& c)
{
    os<<c.names<<"\t"<<c.tel;
}
istream& operator>>(istream& is,student& c)
{
    int l;
    is>>c.names;
    while(1)
    {
        is>>c.tel;
        l=c.tel.size();
        if(l==11)
        break;
    }
}
struct setstudent
{
    vector<student>all;
    multimap<string,int>al;
    multimap<string,int>alll;
public:
    void addstudent();
    void fixstudent();
    void cutstudent();
    void chazhao();
    void readstudent();
    void writestudent();
};
void setstudent::readstudent()
{
    ifstream in;
    in.open("C:\\GameDownload\\student.txt");
    while(!in.eof())
    {
        string one;
        string telll,namess;
        int cunz=1;
        getline(in,one);
        if(one.empty())
        continue;
        istringstream is(one);
        is>>namess;
        is>>telll;
        al.insert(make_pair(namess,all.size()));
        alll.insert(make_pair(telll,all.size()));
        student two(namess,telll,cunz);
        all.push_back(two);
    }
    in.close();
}
void setstudent::writestudent()
{
    ofstream out;
    out.open("C:\\GameDownload\\student.txt");
    for(auto it7=all.begin();it7!=all.end();it7++)
    {
        if((*it7).getcun()==1)
        out<<(*it7)<<endl;
    }
    out.close();
}
void setstudent::addstudent()
{
    student me;
    cin>>me;
    all.push_back(me);
    al.insert(make_pair(me.getnames(),all.size()-1));
    alll.insert(make_pair(me.gettel(),all.size()-1));
}
void setstudent::chazhao()
{
    string renming;
    cin>>renming;
    multimap<string,int>::iterator it1;
    multimap<string,int>::iterator it2;
    it1=al.lower_bound(renming);
    it2=alll.lower_bound(renming);
    if(it1!=al.end())
    {
        for(;it1!=al.upper_bound(renming);it1++)
        {
            if(all[it1->second].getcun())
            cout<<all[it1->second]<<endl;
        }
    }
    if(it2!=alll.end())
    {
        for(;it2!=alll.upper_bound(renming);it2++)
        {
            if(all[it2->second].getcun())
            cout<<all[it2->second]<<endl;
        }
    }
}
void setstudent::fixstudent()
{
    string renming;
    cin>>renming;
    multimap<string,int>::iterator it1;
    multimap<string,int>::iterator it2;
    it1=al.find(renming);
    it2=alll.find(renming);
    if(it1!=al.end())
    {
        string newte;
        cin>>newte;
        string oldte=all[it1->second].gettel();
        all[it1->second].xiugaite(newte);
        alll.erase(oldte);
        alll.insert(make_pair(newte,it1->second));
    }
    if(it2!=alll.end())
    {
        string newna;
        cin>>newna;
        string oldna=all[it2->second].getnames();
        all[it2->second].xiugaina(newna);
        al.erase(oldna);
        al.insert(make_pair(newna,it2->second));
    }
}
void setstudent::cutstudent()
{
    string renming;
    cin>>renming;
    multimap<string,int>::iterator it1;
    multimap<string,int>::iterator it2;
    it1=al.find(renming);
    it2=alll.find(renming);
    if(it1!=al.end())
    {
        all[it1->second].xiugaicun();//置为0
    }
    if(it2!=alll.end())
    {
        all[it2->second].xiugaicun();//置为0
    }
}
int main()
{
    int n;
    setstudent cao;
    cao.readstudent();
    for(auto it1=cao.all.begin();it1!=cao.all.end();it1++)
    {
        cout<<(*it1)<<endl;
    }
    for(auto it2=cao.al.begin();it2!=cao.al.end();it2++)
    {
        cout<<it2->first<<" "<<it2->second<<endl;
    }
    for(auto it3=cao.alll.begin();it3!=cao.alll.end();it3++)
    {
        cout<<it3->first<<" "<<it3->second<<endl;
    }
    cin>>n;
    while(n--)
    {
        cao.addstudent();
    }
    cao.chazhao();
    cao.fixstudent();
    cao.cutstudent();
    cao.writestudent();
    return 0;
}
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值