我有一個存儲應該可互換的兩個點的結構。一個結構中的多個點的運算符
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;
}
我期待,以使用該結構的std::map
operator<
和
operator>
方法
我試過以下(使用乘法),但它不起作用,因爲有很多情況下不同的邊緣返回相同的VA略
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;
雖然因爲0 * 1 == 2 * 0
所以,地圖返回2
當我打電話edgePoints[e3]
operator<
方法工作
有誰知道operator<
和operator>
方法,我可以使用,甚至一些其他方式映射的邊緣爲了使用std::map
你可以使用'unordered_map'來代替,如果你爲你的'Edge'類型提供散列函數 – melak47
這看起來像我想要的,但是我的散列函數應該是什麼? – Elipzer
如果第一個<第二個整數(第二個,第一個)否則整數(第一個,第二個) –