我正在努力有效地成对存储信息:
例如,我有两个表示(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/