请考虑两个类Node
和Edge
,分别代表多图的节点和边(请参见下面的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>
答案 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;