我很难有效地成对存储信息:
例如,我有两个结构代表(x,y)坐标,我希望计算并存储它们之间的距离。目前,我将所有值存储在
中两次 unordered_map<pair<Struct1*,Struct2*,double>
我的问题是,在搜索时,我希望结果<Struct1*,Struct2*>
与<Struct2*,Struct1*>
的值相同,这样我就不必存储两次信息。我考虑过使用多图,但我认为std::hash<pair<pointer1,pointer2>>
会将与pair<pointer2,pointer1>
相同的值哈希到任何有关如何执行此操作的建议吗?
编辑:
我考虑过做一个客户哈希,只需使用std :: hash添加指针的两个哈希值,如:
size_t operator() (const pair<Location*,Location*> &key)
{
hash<Location*> hash1;
return (hash1(key.first) + hash1(key.second));
}
当我调用find(struct1,struct2)时,这是有效的,但是当我调用find(struct2,struct1)
时答案 0 :(得分:1)
unordered_map不仅使用哈希来标识密钥,还使用比较运算符:
template<
class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class Allocator = std::allocator< std::pair<const Key, T> >
> class unordered_map;
KeyEqual
参数默认调用std::equal_to
,默认情况下调用operator==
。
要执行您想要的操作,您可以将KeyEqual
参数替换为自定义参数,当给定pair<struct1*, Struct2*>
时,pair<struct2*, struct 1*>
将独立于订单返回true