如何实现具有多个键的快速映射? 我正在寻找一个C++关联映射容器类型,可以执行多个密钥查找。地图需要有固定的时间查找,但我不在乎它是有序的还是无序的。它只需要快一点
例如,我想在一个映射中存储一组如何实现具有多个键的快速映射? 我正在寻找一个C++关联映射容器类型,可以执行多个密钥查找。地图需要有固定的时间查找,但我不在乎它是有序的还是无序的。它只需要快一点,c++,dictionary,containers,stdmap,C++,Dictionary,Containers,Stdmap,例如,我想在一个映射中存储一组std::vector对象,其中int和void*作为查找键。int和void*必须匹配才能检索我的向量 这样的容器是否已经存在?还是我要自己滚?如果是,我该如何实施?我一直在尝试将一个boost::unordered_map存储在另一个boost::unordered_map中,但这种方法还没有成功。如果没有更简单的方法,也许我会继续使用这种方法。你可以使用 (尽管我认为您实际想要的是使用一个同时包含void*和integer的类型作为映射的键,并且只是比较两者的
std::vector
对象,其中int
和void*
作为查找键。int
和void*
必须匹配才能检索我的向量
这样的容器是否已经存在?还是我要自己滚?如果是,我该如何实施?我一直在尝试将一个boost::unordered_map
存储在另一个boost::unordered_map
中,但这种方法还没有成功。如果没有更简单的方法,也许我会继续使用这种方法。你可以使用
(尽管我认为您实际想要的是使用一个同时包含void*和integer的类型作为映射的键,并且只是比较两者的原始数据,以便为映射提供比较运算符)常量查找需要一个哈希映射。您可以使用(或tr1)。键将是int和void指针的键。如果不想使用boost,可以尝试
map
。但是,查找是O(log(map size))。因为您也可以使用,因为它似乎非常适合您的要求:
无序映射是一个关联容器,其中包含具有唯一键的键值对。元素的搜索、插入和删除具有平均恒定的时间复杂度
要将int
和void*
组合成一个键,可以使用
要使无序映射与该对一起工作,必须指定合适的哈希函数。为了使下面的示例保持简短,我在一个函数中使用了std::hash
函数调用的组合。如果此函数导致性能问题,您可能需要创建更复杂的哈希
您没有指定向量的内容,因此为了简单起见,我选择了int
。但是,您可以使解决方案适应任何向量内容。总之,您的代码可以如下所示:
using Key = std::pair<int, void*>;
auto hash = [](const Key & k) {
return std::hash<int>()(k.first) * 31 + std::hash<void*>()(k.second);
};
std::unordered_map<Key, std::vector<int>, decltype(hash)> um(8, hash);
使用Key=std::pair;
自动哈希=[](常量键和k){
返回std::hash()(k.first)*31+std::hash()(k.second);
};
无序映射um(8,散列);