作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为我的对象使用散列存储。这真的比std::map<std::string, Object>
快吗? ?我的意思是搜索。据我所知,boost 过程有很多优化。
而且我不确定我的代码是否正确。它在搜索/插入等时真的使用散列键吗?
using boost::multi_index_container;
using namespace boost::multi_index;
struct Object
{
std::string name;
Object(std::string name_): name(name_) {}
};
typedef multi_index_container<
Object,
indexed_by<
hashed_unique<
BOOST_MULTI_INDEX_MEMBER(Object, std::string, name)
>
>
> ObjectSet;
ObjectSet objects;
objects.insert(Object("test1"));
objects.insert(Object("test2"));
objects.insert(Object("test3"));
// And testing:
objects.find("test2");
最佳答案
当您只有一个键时,为什么要使用 Boost Multi-Index Container?如果您不打算很快添加更多键,您应该只使用 std::unordered_map
或 std::map
。
至于哈希表与树:
例如 unordered_map 的 GCC 实现从不缩小它的表,所以如果你添加了很多元素,然后删除了其中的大部分,你会留下一些数据局部性非常糟糕的东西(因此性能很差 w.r.t. 缓存)。在算法上哈希表可能很有吸引力,但在实际运行的系统中,它们可能表现出比树更差的性能,尤其是当元素数量为数百或更少时。
关于c++ - 散列和访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612138/
我是一名优秀的程序员,十分优秀!