0

我正在努力成对有效地存储信息:

例如,我有两个表示 (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) 时无效

4

1 回答 1

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参数替换为自定义参数,当给定 apair<struct1*, Struct2*>和 a时,该参数pair<struct2*, struct 1*>true独立于订单返回。

于 2013-11-26T12:05:31.303 回答