比较两个没有成员作为唯一标识符的类实例

时间:2019-04-07 12:59:48

标签: c++ hash comparison comparator comparison-operators

请考虑两个类NodeEdge,分别代表多图的节点和边(请参见下面的MWE代码)。我的意图是使用三个unordered_map

(a)从Node变量到Edge数据,

(b)从Edge变量到Node数据,以及

(c)从Node对到double变量。

我试图为bool operator==()Node*编写Edge*函数,为Node*Edge*pair<Node*,Node*>编写哈希函数。

我的第一个问题与bool operator==()的{​​{1}}功能有关。尽管Edge的标签肯定是唯一的,但此Node函数对于具有相同bool operator==()start s()的多个边并不正确。是否有机会使用end的内存地址来构造正确的bool operator==()函数?

第二个问题是,如果仅假设简单边缘,这些函数是否仅导致保存不同的Edge对象。

所以,我的MWE如下:

Node/Edge/pair<Node,Node>

1 个答案:

答案 0 :(得分:0)

您通常定义operator==(const Edge&, const Edge*)
而您将需要operator==(const Edge*, const Edge*),但无法定义后者。

您必须编写定义operator()(const Edge*, const Edge*) const并在std::unordered_map中提供的类。

struct MyEdgeComp
{
    bool operator()(const Edge* lhs, const Edge* rhs) const {
        return *lhs == *rhs; // Assuming you implement it
    }
};

std::unordered_map<Edge*, Node, std::hash<Edge*>, MyEdgeComp> e2n;