- 论坛徽章:
- 0
|
内容大概是这样的: 竞技场系统,里面的每个玩家(player_id) 打赢一盘都会有积分(player_score), 我要知道 某个玩家 对应排了多少名,假设积分不重复
我的想法是这样的 类里面 有两个map,一个是以player_id 为索引,一个是 以player_score 为索引
map< player_id, player_score> m1
map< player_score, player_id> m2
当插入一个玩家的时候,插入到 两个map中
当要查询某个 player_id对应的 排名时 1. 通过第一个map 查询到 这个玩家 多少分,
2. 通过第二个map查询到 这个玩家 对应的 迭代器,再通过 这个 迭代器 和 第二个的开始迭代器 之间的距离 来查到 他 多少名
stl有一个自带的算法 std::distance( iter , m2.begin() )
这个 虽然看上去 还行,不过 在 步骤2 中, 由于 map 的迭代器 不是 随机迭代器,不支持相减,所以是一个线性遍历,来查到这个是 第几个
各位 大神,我就是 为了避免 遍历, 才想到 用两个map的 ,有没有 啥 好办法 找到 player_id 对应的排名,
不知道 有没有什么 能够避免遍历的, 多用 几个map 啥的都没关系
谢谢 |
|