2016-05-17 107 views
-3

這裏是我的代碼:爲什麼排序不適合矢量?

vector<EntryMsg> entryMsgs; // i store some Entry Msg in this vector 

void step5(vector<EntryMsg> entryMsg) 
{ 
    sort(entryMsg.begin(), entryMsg.end(), [](const EntryMsg& a, const EntryMsg& b) { 
     return (a.fields.instrument[0] <= b.fields.instrument[0]) || (a.fields.instrument[1] <= b.fields.instrument[1]) || (a.fields.instrument[2] <= b.fields.instrument[2]); 
    }); 
    for_each(entryMsg.begin(), entryMsg.end(), [](const EntryMsg& msg){ 
     cout<<msg.fields.instrument[0]<<msg.fields.instrument[1]<<msg.fields.instrument[2]<<endl; 
    }); 
} 

我用它撥打:step5(entryMsgs);

但從輸出,我覺得entryMsgs沒有排序,有什麼原因嗎?

回答

1

您需要通過vector參考

void step5(vector<EntryMsg>& entryMsg) 
{ 
    sort(entryMsg.begin(), entryMsg.end(), [](const EntryMsg& a, const EntryMsg& b) { 
     return (a.fields.instrument[0] <= b.fields.instrument[0]) || (a.fields.instrument[1] <= b.fields.instrument[1]) || (a.fields.instrument[2] <= b.fields.instrument[2]); 
    }); 
    for_each(entryMsg.begin(), entryMsg.end(), [](const EntryMsg& msg){ 
     cout<<msg.fields.instrument[0]<<msg.fields.instrument[1]<<msg.fields.instrument[2]<<endl; 
    }); 
} 

這樣的大型物體應該始終作爲引用傳遞,或const參考,如果調用的函數不會修改它。理想情況下,不要複製。

2

的原因是你的破邏輯...

return (a.fields.instrument[0] <= b.fields.instrument[0]) || (a.fields.instrument[1] <= b.fields.instrument[1]) || (a.fields.instrument[2] <= b.fields.instrument[2]) 

例如,如果你a.fields.instrument[1] <= b.fields.instrument[1]返回true說a < b,但a.field.instrument[0]可能比b的更大。

我可以告訴你如何解決它,但有一個自己想想,並嘗試在紙上的幾個例子。