#hash-map #key #http #collection #sockets #different #items

multi-map

类似于std::collection::HashMap,但允许您使用两个不同的键来检索项目

7个稳定版本

使用旧的Rust 2015

1.3.0 2020年4月11日
1.2.0 2019年1月24日
1.1.0 2017年3月26日
1.0.3 2016年8月1日
1.0.1 2016年7月31日

#1448网络编程

Download history 262/week @ 2024-03-13 415/week @ 2024-03-20 535/week @ 2024-03-27 212/week @ 2024-04-03 340/week @ 2024-04-10 701/week @ 2024-04-17 558/week @ 2024-04-24 304/week @ 2024-05-01 156/week @ 2024-05-08 336/week @ 2024-05-15 544/week @ 2024-05-22 249/week @ 2024-05-29 309/week @ 2024-06-05 222/week @ 2024-06-12 364/week @ 2024-06-19 497/week @ 2024-06-26

1,412 每月下载量
5 个Crate中(2个直接)使用

MIT 许可证

21KB
311 代码行

Multi-Map

Build Status Crate version Documentation

类似于 std::collection::HashMap,但允许您使用两个不同的键来检索项目。

在开发软件堆栈时,有时某层需要存储一些上下文对象。例如,我们有一个HTTP模块,它位于某种使用HTTP的应用程序下方,位于Socket模块上方。

当创建新的连接时,Socket模块会发送一个包含新连接ID的消息。创建一个新的HTTP连接对象,并将其存储在Socket ID上,以便在Socket上到达数据时可以轻松检索。但为了通知上层关于新的HTTP连接(与其他可能正在进行的HTTP连接区分开来),我们需要给HTTP连接本身一个唯一的ID,并且我们需要一种机制通过此ID来定位HTTP连接。

简单的解决方案是将HTTP连接存储在列表中,然后迭代它们,查找匹配的Socket ID或匹配的HTTP连接ID。但这很慢。

HashMap看起来是个好主意,但您只能基于HTTP ID或Socket ID键,而不能同时基于两者。

此模块允许您创建一个MultiMap - 一个您可以按主键(HttpID)或替代ID(SocketID)查找的映射。内部使用两个映射,一个在(K1, (K2, V))上,另一个在(K2, K1)上。

支持插入、删除和迭代。可能逐渐实现std::collections::HashMap API的其余部分,但目前已发现这足够有用。

无运行时依赖项