无序 - 对的MultiMap

时间:2013-11-26 04:27:21

标签: c++ hash hashmap unordered-map unordered-set

我很难有效地成对存储信息:

例如,我有两个结构代表(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)

1 个答案:

答案 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