C++ 哈希表-哈希函数的实现

C++ 哈希表-哈希函数的实现,c++,algorithm,data-structures,hashtable,C++,Algorithm,Data Structures,Hashtable,我有一个项目,我需要实现一个哈希表。我有两门课:粉丝课和门票课。球迷可以有门票,每张门票都与球迷的电子邮件相关联 我的问题是,关键是什么,我应该在哪里实现哈希函数?我的猜测是,这将是在票。h,但我仍然不知道如何将票关联到球迷(所有者)的电子邮件 我不认为需要任何代码,但如果有任何疑问,我会发布一些 致意 类风扇(“Adepto”) class-Adepto{ int-uid; 无序的电子邮件; 静态int-newID; 字符串名称; 串内基帕; 公众: Adepto(string nome);

我有一个项目,我需要实现一个哈希表。我有两门课:粉丝课和门票课。球迷可以有门票,每张门票都与球迷的电子邮件相关联

我的问题是,关键是什么,我应该在哪里实现哈希函数?我的猜测是,这将是在票。h,但我仍然不知道如何将票关联到球迷(所有者)的电子邮件

我不认为需要任何代码,但如果有任何疑问,我会发布一些

致意

类风扇(“Adepto”)

class-Adepto{
int-uid;
无序的电子邮件;
静态int-newID;
字符串名称;
串内基帕;
公众:

Adepto(string nome);
//Adepto(string nome, Equipa* e1, vector<Bilhete*> bilhetes);
Adepto();

unsigned int getID() const;

string getNome() const;
void setNome(string n);

string getEquipa() const;
void setEquipa(string nEq);

string getEmail() const;
void setEmail(string novoEmail);
Adepto(字符串名称);
//Adepto(串名称、设备*e1、向量比尔赫特);
Adepto();
无符号int getID()常量;
字符串getNome()常量;
void setNome(字符串n);
字符串getEquipa()常量;
无效setEquipa(字符串nEq);
字符串getEmail()常量;
void setEmail(字符串novoEmail);
机票等级(比尔赫特)

struct hash\u adeptos{
int运算符(){
返回a1.getEmail()().size();}
布尔运算符(){
返回a1.getEmail()==a2.getEmail();}
};
typedef tr1::无序的_集选项卡adeptos;
比尔赫特类{
TabelaAdeptos adeptos;
int-uid;
静态int-newID;
日期:validade;
弦多诺;
布尔·文迪多;
公众:
Bilhete(日期validade、字符串dono、bool vendido);
比尔赫特();
int getID()常量;
void setID(int id);
日期getValidade()常量;
无效设置有效日期(日期);
字符串impimebilehete()常量;
//Adepto*getDono()常量;
//无效塞多诺(阿德托和a1);
bool getEstado()常量;
布尔·塞文迪多(比尔赫特和b1);
};
我的问题是,关键是什么

我想关键是车票。所以你可以通过车票号码获得关于持票人的信息

我应该在哪里实现我的散列函数

我认为这无关紧要。我可能会创建另一对文件:
TicketHash.hpp
TicketHash.cpp

我仍然不知道我将如何将票与粉丝(所有者)电子邮件联系起来

哈希函数必须以票证为参数,返回哈希表中单元格(或指向单元格的指针)的编号以及票证持有者的相应信息

我认为您甚至可以创建这样的函数
unsigned int hash(Ticket&Ticket){return Ticket.number;}
,但这样它将只是一个数组而不是哈希表

有关哈希函数的示例,请参阅

我的问题是,关键是什么

我想关键是车票。所以你可以通过车票号码获得关于持票人的信息

我应该在哪里实现我的散列函数

我认为这无关紧要。我可能会创建另一对文件:
TicketHash.hpp
TicketHash.cpp

我仍然不知道我将如何将票与粉丝(所有者)电子邮件联系起来

哈希函数必须以票证为参数,返回哈希表中单元格(或指向单元格的指针)的编号以及票证持有者的相应信息

我认为您甚至可以创建这样的函数
unsigned int hash(Ticket&Ticket){return Ticket.number;}
,但这样它将只是一个数组而不是哈希表


有关散列函数的示例,请参见

,我将以以下方式实现此功能:

Class Tickets{
    String number;
    //Other details...
}

Class Fans{
    ArrayList<Tickets> list;
    String email;
    int index;      //this is an auto increment field which I'd have used in my implementation, just for the ease of further operations. This actually helps.
    //Other details
}

Class Hash{
    //KEY
    String[] key;    //index and email in `Fans` class are unique values
    //Value
    ArrayList<Tickets>[] value;

    //function to assign values
    void assign(String id, Ticket ticket){
        if(key.contains(id))
            value<index of id>.add(Ticket);
        else
            value<new index>.add(Ticket);
    }

    //function that returns value
    Arraylist<Tickets> value(String id){
        return value<index of id>;
    }
}
课堂票{
字符串编号;
//其他细节。。。
}
班迷{
数组列表;
字符串电子邮件;
int index;//这是一个自动递增字段,我会在实现中使用它,只是为了便于进一步的操作。这实际上很有帮助。
//其他详情
}
类散列{
//钥匙
String[]key;//Fans类中的索引和电子邮件是唯一的值
//价值观
ArrayList[]值;
//函数来赋值
无效分配(字符串id、票证){
if(key.contains(id))
增值(票);
其他的
增值(票);
}
//返回值的函数
Arraylist值(字符串id){
返回值;
}
}
编辑:


对不起,我没有看到标签C++。我用java语言编写的,就像是语法,但是它是粗略的逻辑,应该是可以理解的。如果有任何混淆,请在下面发表评论。代替ARAYLIST,你可以在CPP中使用<代码>矢量<代码>或<代码>列表>代码>。
Class Tickets{
    String number;
    //Other details...
}

Class Fans{
    ArrayList<Tickets> list;
    String email;
    int index;      //this is an auto increment field which I'd have used in my implementation, just for the ease of further operations. This actually helps.
    //Other details
}

Class Hash{
    //KEY
    String[] key;    //index and email in `Fans` class are unique values
    //Value
    ArrayList<Tickets>[] value;

    //function to assign values
    void assign(String id, Ticket ticket){
        if(key.contains(id))
            value<index of id>.add(Ticket);
        else
            value<new index>.add(Ticket);
    }

    //function that returns value
    Arraylist<Tickets> value(String id){
        return value<index of id>;
    }
}
课堂票{
字符串编号;
//其他细节。。。
}
班迷{
数组列表;
字符串电子邮件;
int index;//这是一个自动递增字段,我会在实现中使用它,只是为了便于进一步的操作。这实际上很有帮助。
//其他详情
}
类散列{
//钥匙
String[]key;//Fans类中的索引和电子邮件是唯一的值
//价值观
ArrayList[]值;
//函数来赋值
无效分配(字符串id、票证){
if(key.contains(id))
增值(票);
其他的
增值(票);
}
//返回值的函数
Arraylist值(字符串id){
返回值;
}
}
编辑:


对不起,我没有看到标签C++。我用java语言编写的,就像是语法,但是它是粗略的逻辑,应该是可以理解的。如果有任何混淆,请在下面发表评论。代替ARAYLIST,你可以在CPP中使用<代码>矢量<代码>或<代码>列表>代码。< /P>什么是哈希表?你在哈希表中存储什么?考虑到应用程序还应该管理观众,向团队的支持者出售电子机票。当购买一张票时,这与你的电子邮件地址中的购买者有关;其他数据也必须与票券有关,如显示的节目、支持者的姓名和地址。。哈希表应包含与风扇关联的票证信息。哈希表用于什么?存储什么
Class Tickets{
    String number;
    //Other details...
}

Class Fans{
    ArrayList<Tickets> list;
    String email;
    int index;      //this is an auto increment field which I'd have used in my implementation, just for the ease of further operations. This actually helps.
    //Other details
}

Class Hash{
    //KEY
    String[] key;    //index and email in `Fans` class are unique values
    //Value
    ArrayList<Tickets>[] value;

    //function to assign values
    void assign(String id, Ticket ticket){
        if(key.contains(id))
            value<index of id>.add(Ticket);
        else
            value<new index>.add(Ticket);
    }

    //function that returns value
    Arraylist<Tickets> value(String id){
        return value<index of id>;
    }
}