std里面有这种类似排序的东东吗

bluebohe 2020-10-26 09:04:23
内存里大概管理几千万个人,每个人钱包里面的钱数不等,并且在动态改变,我只想用最快的速度找到某一时刻前十的富豪,std里面有什么合适的数据结构处理它吗?自己做数据结构的话不难,用sql更简单,但是我就想知道std里面有没有现成的
...全文
190 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2020-10-27
  • 打赏
  • 举报
回复
std::n_th,现成的
qybao 2020-10-26
  • 打赏
  • 举报
回复
引用 3 楼 bluebohe 的回复:
因为我只想找到几千万条数据里面的几条,所以如果在找的时候,去做排序,那么为了几条数据排序几千万条数据的代价相当大,所以希望最好这个容器就是有序的,并且可以动态的在修改值的时候能够重新成为有序,std里面没有这种适合的容器吧,没有的话我也就死心了

java的treeset可以,但c++里没有
不管你是用sql还是什么,都需要排序啊,只是sql是数据库帮你排序而已
或者可以做个前几条记录的缓存,数据发生变化就跟缓存的记录比较(大于缓存的数据则交换),随时保存缓存的记录是最新的最高值
_mervyn 2020-10-26
  • 打赏
  • 举报
回复
std::set std::map
bluebohe 2020-10-26
  • 打赏
  • 举报
回复
因为我只想找到几千万条数据里面的几条,所以如果在找的时候,去做排序,那么为了几条数据排序几千万条数据的代价相当大,所以希望最好这个容器就是有序的,并且可以动态的在修改值的时候能够重新成为有序,std里面没有这种适合的容器吧,没有的话我也就死心了
真相重于对错 2020-10-26
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstdlib>
#include <climits>
 
int main()
{
    int a[] = {-2, 99, 0, -743, 2, INT_MIN, 4};
    constexpr std::size_t size = sizeof a / sizeof *a;
 
    std::qsort(a, size, sizeof *a, [](const void* a, const void* b)
    {
        int arg1 = *static_cast<const int*>(a);
        int arg2 = *static_cast<const int*>(b);
 
        if(arg1 < arg2) return -1;
        if(arg1 > arg2) return 1;
        return 0;
 
    //  return (arg1 > arg2) - (arg1 < arg2); // 可行的缩写
    //  return arg1 - arg2; // 错误的缩写(若有 INT_MIN 则失败)
    });
 
    for(int ai : a)
        std::cout << ai << ' ';
}
xiaolinxianju 2020-10-26
  • 打赏
  • 举报
回复
可以考虑用VECTOR容器,支持根据自定义规则自动排序
_mervyn 2020-10-26
  • 打赏
  • 举报
回复
引用 6 楼 bluebohe 的回复:
[quote=引用 4 楼 _mervyn 的回复:]std::set std::map
这个首先key没法重复,然后修改了钱数也没法办[/quote] 那就std::multiset或者std::multimap 。。。。 以钱数为key, 每次要改钱数时,先取出对应的元素改后重新插入。。 我觉得还是看你的应用是 “查询前十的的富豪”频率高,还是“钱数改变“ 的频率高。
CoatiCoati 2020-10-26
  • 打赏
  • 举报
回复
STL里面的优先队列,priority_queue
bluebohe 2020-10-26
  • 打赏
  • 举报
回复
引用 4 楼 _mervyn 的回复:
std::set
std::map


这个首先key没法重复,然后修改了钱数也没法办

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧