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

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

最佳答案

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

关于c++ - 对的无序 multimap ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20208498/

10-10 11:53