如何以 websocketpp::connection_hdl 为键实现 boost::unordered_map?
Posted
技术标签:
【中文标题】如何以 websocketpp::connection_hdl 为键实现 boost::unordered_map?【英文标题】:How to implement a boost::unordered_map with websocketpp::connection_hdl as key? 【发布时间】:2014-04-19 19:23:38 【问题描述】:对于我的应用程序,将websocketpp::connection_hdl
s 的映射作为映射中的键更方便和合乎逻辑,但我发现这可能是危险的,因为它们是weak_ptr
s。
但是,如果 weak_ptr
密钥过期,boost::unordered_map
可能不会中断 claimed。
这是真的吗?如果是这样,如何构造一个以将connection_hdl
s 作为键以及插入、擦除和查找/计数?此外,需要什么才能遍历它们,例如使用for
?
目前这超出了我的技能范围,所以我不确定我在看什么。
【问题讨论】:
【参考方案1】:boost::unordered_map
的迭代速度可能很慢,因此,我建议您可以将所有 websocketpp::connection_hdl
存储在 std::vector
中。对于地图,您可以使用指针作为键:boost::unordered_map<websocketpp::connection_hdl*, X>
【讨论】:
是的。或者,如果迭代和查找的 O(log(n)) 时间对您来说没问题,请使用 std::map。 所有 stl 容器都是您放入的内容。您必须自己从每个容器中删除过期的连接。 再次感谢您!这个答案和你的 cmets 有冲突吗? ***.com/a/23156251/1382306 这完全超出了我的能力范围,我需要把它做好。提前非常感谢您! 指针将始终指向某个地址,顺序或散列总是被定义。只需注意删除过期连接的条目即可。以上是关于如何以 websocketpp::connection_hdl 为键实现 boost::unordered_map?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式设置的主题。如何重新加载 Activity 以应用
如何以编程方式移动 UIScrollView 以集中在键盘上方的控件中?