2015-12-02 66 views
3

我已經在一個vectorC++的std ::排序常量結構

struct ub_node { 
    const size_t index; 
    const double ub_dist; 
    bool operator<(const ub_node &rhs) const { return ub_dist< rhs.ub_dist; } 
}; 

以下struct我想那種vector。我試過使用std::sort但我得到一個編譯錯誤: error: use of deleted function ‘ub_node& ub_node::operator=(ub_node&&)’參考我所在的行std::sort(result.begin(), result.end());,其中result的類型爲vector<ub_node>

據我瞭解,在const確實影響執行時間,而只是確保程序員(我)不會做任何愚蠢的事。如果是這種情況,我可能會刪除const並嘗試確保我以後不更改節點。有人能證實這一點嗎?還是幫我排序呢?

回答

3

As far as I understand, the const does NOT affect the execution time, but merely ensures that the programmer (me) does not do anything stupid.

正確。

對矢量進行排序會交換元素,如果元素具有不可變的數據(這與您的ub_node類型不同,除了矢量的末尾之外無法移除或插入元素,因爲這也需要修改現有的元素)。

我建議你刪除您成員const,所以類型是可能修改,然後構造你的代碼,使程序的部分不應該修改它只能通過const ub_node&const ub_node*與交互類。

這意味着該類在必要時是可修改的,但不會被程序中不應修改的部分修改。

+0

這是暗示,如果我的'struct'有一個複雜的成員,例如另一個'矢量',然後排序這將會使這些'矢量'的副本很多,或者它只是改變參考? – YnkDK

+1

對結構的向量'vec'進行排序會'多次調用'swap(vec [i],vec [j])。無論是高效還是對結構成員進行大量賦值都取決於您是否爲您的類型重載了'swap',或者您的類型是否可以低成本地運行_move assigned_。如果您的類重載'swap'或遵循[五的規則或零規則](http://en.cppreference.com/w/cpp/language/rule_of_three),那麼對它進行排序將很便宜,不需要複製。 –