早上看到一個命題 ,  提到要 sort 一個很大的陣列資料,這個陣列可能一行只有幾個 bytes,

也可能一行有幾萬個 bytes !!!  使用一般的 sort function , 這些 size 很大的資料搬來搬去

對 performance 影響頗大 ,  以下是一個不錯的建議 :

vector<string> v ;
vector<string*> p ;

bool myfunction (string s1,string s2) { return (s1<s2); }

int main()
{
    string s[16] ;
 
    s[0] =  "111111111111111111111111" ;
    s[1] =  "z11111111111111111111111" ;
    s[2] =  "911111111111111111111111" ;
    s[3] =  "B11111111111111111111111" ;
    s[4] =  "D11111111111111111111111" ;
    s[5] =  "w11111111111111111111111" ;
    s[6] =  "a11111111111111111111111" ;
    s[7] =  "811111111111111111111111" ;
    s[8] =  "311111111111111111111111" ;
    s[9] =  "P11111111111111111111111" ;
    s[10] = "G11111111111111111111111" ;
    s[11] = "j11111111111111111111111" ;
    s[12] = "411111111111111111111111" ;
 s[13] = "C11111111111111111111111" ;
 s[14] = "J11111111111111111111111" ;
 s[15] = "v11111111111111111111111" ;
 
    /*
 for(const auto&x:s)
     v.emplace_back(x) ;
 sort(v.begin(),v.end(), [](string s1,string s2) { return (s1<s2); } ) ;
    for(const auto&s:v)
        cout << s << " " << endl ;
 cout << "=====================================" << endl ;
 */
    for(int idx=0;idx<16;idx++)
     p.emplace_back(&(s[idx])) ;
 sort(p.begin(),p.end(), [](string* p1,string* p2) { return (*p1<*p2); } ) ;
    for(const auto&s:p)
        cout << *s << " " << endl ;
 
}

也就是建立一個指標陣列 ,  64 bits OS 指標不過就是 8 bytes , 搬起來應該頗簡單 ,

不測速度了 !!

 

 

全站熱搜

hedgezzz 發表在 痞客邦 留言(0) 人氣()