早上看到一個命題 , 提到要 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 , 搬起來應該頗簡單 ,
不測速度了 !!
留言列表