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

bluebohe 2020-10-26 09:04:23
内存里大概管理几千万个人,每个人钱包里面的钱数不等,并且在动态改变,我只想用最快的速度找到某一时刻前十的富豪,std里面有什么合适的数据结构处理它吗?自己做数据结构的话不难,用sql更简单,但是我就想知道std里面有没有现成的
...全文
147 9 打赏 收藏 举报
写回复
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里面没有这种适合的容器吧,没有的话我也就死心了
  • 打赏
  • 举报
回复
#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没法重复,然后修改了钱数也没法办
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.1w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2020-10-26 09:04
社区公告
暂无公告