記憶體里大概管理幾千萬個人,每個人錢包里面的錢數不等,并且在動態改變,我只想用最快的速度找到某一時刻前十的富豪,std里面有什么合適的資料結構處理它嗎?自己做資料結構的話不難,用sql更簡單,但是我就想知道std里面有沒有現成的
uj5u.com熱心網友回復:
可以考慮用VECTOR容器,支持根據自定義規則自動排序uj5u.com熱心網友回復:
#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 << ' ';
}
uj5u.com熱心網友回復:
因為我只想找到幾千萬條資料里面的幾條,所以如果在找的時候,去做排序,那么為了幾條資料排序幾千萬條資料的代價相當大,所以希望最好這個容器就是有序的,并且可以動態的在修改值的時候能夠重新成為有序,std里面沒有這種適合的容器吧,沒有的話我也就死心了
uj5u.com熱心網友回復:
std::setstd::map
uj5u.com熱心網友回復:
java的treeset可以,但c++里沒有
不管你是用sql還是什么,都需要排序啊,只是sql是資料庫幫你排序而已
或者可以做個前幾條記錄的快取,資料發生變化就跟快取的記錄比較(大于快取的資料則交換),隨時保存快取的記錄是最新的最高值
uj5u.com熱心網友回復:
這個首先key沒法重復,然后修改了錢數也沒法辦
uj5u.com熱心網友回復:
STL里面的優先佇列,priority_queueuj5u.com熱心網友回復:
那就std::multiset或者std::multimap 。。。。 以錢數為key, 每次要改錢數時,先取出對應的元素改后重新插入。。
我覺得還是看你的應用是 “查詢前十的的富豪”頻率高,還是“錢數改變“ 的頻率高。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193134.html
標籤:C++ 語言
上一篇:這個運算式是啥子意思嘞
