有一个c++的需求,如果是大神你,要怎么设计。

稀饭桶子 发布于 2018/02/12 15:34
阅读 768
收藏 1

有一个结构体,Person,

它有两个属性。ID 和 Money。

现在有大量的Person数据。比如一万个吧。不是一百万这么多。

如果既想要快速根据ID查找Person,又希望根据Money来排序(Money是动态变化)。

map排序 或者 vector+std::sort 好像不是特别符合需求。

 

求大神

加载中
0
changnet
changnet

用std::map,解决按id查找。同时std::map底层是树结构,有排序的,直接再排下序。参考桶排序。不要用unorder_map。排序问题,其实用map来记录当前排序索引后,用一个vector来排序,money变动的移动一个,超级快,尤其是数据量才一万,怎么做都很快。

0
-飞客-
-飞客-

我的理解是 每次MONEY变化, 要维护整个Person的顺序.

这样就需要一个std::map <String,Person> 用来快速用id 来查找Person

还需要一个 std::list<Person> 这个链表用来顺序存放Person

每次Person的money变动,只需要改动 list内的顺序即可:

可以是二分查找法之类, 然后把Person换个到正确的位置.

也可能STL内有这样的自动排序list可以用.

注意要是多线程的话得加锁

一定要保证map内的person和list内的person是同一个地址.

0
梅开源
梅开源

往sqlite里一塞,再select 。。。order by 一查

要不你写个树,每次数据动更新索引

0
平原君
平原君

数据量才一万,随便弄弄就行

宋宁126
赞同��
0
As-xjc
As-xjc

boost::multi_index,想怎么弄就怎么弄

0
dosshell
dosshell

sqlite memory 模式

0
宋宁126
与其劳心劳神写代码,不如直接用数据库。sqlite
0
欢乐送分
欢乐送分

那你就用两个map啊.  Person存在链表里. 两个map分别用map<ID, Person *> map<Money, Person *>

返回顶部
顶部