【发布时间】:2015-10-03 14:24:22
【问题描述】:
我有一个结构,它存储了两个应该可以互换的点。
struct Edge
{
unsigned short firstIndex;
unsigned short secondIndex;
Edge(unsigned short firstIndex, unsigned short secondIndex) :
firstIndex(firstIndex), secondIndex(secondIndex) {}
};
operator== 方法应该如下(使它们可以互换)
bool operator == (const Edge& e2) const
{
return
first == e2.first && second == e2.second ||
first == e2.second && second == e2.first;
}
我希望创建一个operator< 和operator> 方法,以便在std::map 中使用该结构
我尝试了以下方法(使用乘法),但它不起作用,因为在很多情况下不同的边返回相同的值
bool operator < (const Edge& e2) const
{
return first * second < e2.first * e2.second;
}
我想使用的代码如下:
std::map<Edge, unsigned int> edgePoints;
Edge e1(0, 1);
Edge e2(1, 2);
Edge e3(2, 0);
edgePoints[e1] = 2;
edgePoints[e2] = 0;
edgePoints[e3] = 1;
虽然代码不适用于我的operator< 方法,因为0 * 1 == 2 * 0 所以当我调用edgePoints[e3] 时地图返回2
有谁知道我可以使用的operator< 和operator> 方法,甚至是其他映射边缘的方法以使用std::map
【问题讨论】:
-
如果您为
Edge类型提供哈希函数,您可以使用unordered_map代替 -
这似乎是我想要的,虽然我的哈希函数应该是什么?
-
If first
-
Boost 有一个 hash_combine 函数,你可以使用(或窃取):boost.org/doc/libs/1_55_0/doc/html/hash/combine.html
-
我不想使用 boost。
标签: c++ algorithm struct operator-keyword