例如下图:
+--+- Room:A
| +
| +- Client:1
| +- Client:2
| +- Client:3
|
+- Room:B
| +
| +- Client:1
| +- Client:2
|
|
+- Room:C
现在我的实现是:
维护Room的哈希表,再维护一张Client所在房间的哈希表,当CRUD发生时,操作两个哈希表(当然是带锁的)
粗略地看过locate的实现,但是没看懂里面的frcode编码(资料实在是太少了,我看C有些吃力)
1
aheadlead 2015-01-22 10:32:28 +08:00 via iPhone
为啥client 1和2会同时住俩房间..
|
3
comanboy 2015-01-22 11:10:12 +08:00
這裡的Client1/2 是代表每個房間不同的人,而不是固定的一個人,對吧!
|
4
hanwujibaby 2015-01-22 11:16:46 +08:00 1
这个hash+list应该可以实现吧,room添加client的时候,同时维护一个room和client的hash,同时维护对hash对应的list,这样查找和删除room的client的时候,复杂度只是list的O(n)
|
5
mengzhuo OP |
6
aheadlead 2015-01-22 11:28:49 +08:00 via iPhone 1
@hanwujibaby map+map似乎也不错...(红黑🌲套红黑🌲)
|
7
tabris17 2015-01-22 11:32:21 +08:00 1
Room的数量一般都是固定或者可预见的吧,用数组即可啊
|
8
jsq2627 2015-01-22 12:23:07 +08:00 via iPhone 1
不知楼主有没有用数据库呢?这是一个多对多关系,除了Persom表和Room表,你还得维护一个关联表 PersonRoom。在不担心性能问题的情况下要用外键约束好关系。
如果楼主没有用数据库,简单点的话,把上面三个表对应成三个哈希表,查询的逻辑还是一样。 |
10
hanwujibaby 2015-01-22 13:52:20 +08:00
@aheadlead 可以的。其实我觉得没有必要用red-black tree ,用skipList或者binary search tree 都可以,在复杂度上 比list快。
|