一個刪除一個有喜歡的對象:有效的方式來獲得的std ::地圖元素與容器
std::map<std::string, MyClass> data;
MyClass的地方就是複製昂貴。 在某些應用程序運行流時刻,我需要執行一個操作,通過鍵(通常運算符[])檢索MyClass對象,但我需要從容器中撕下此對象。 直接解決方案是複製到局部變量,然後在容器中擦除。但是複製對於MyClass來說是一項沉重的操作。 有沒有辦法(可能以C++ 11術語)避免複製/刪除?可能有些移動語義從容器到局部變量?不知道如何做到這一點。
最簡單的做法是將有效的移動語義添加到'MyClass'。 –
你能告訴我這項技術嗎?我不是指MyClass的可移動ctor,但是在我的情況下使用這個,如果已經實現了可移動的MyClass – amigo421
如果'MyClass'已經可以移動,並且對於有問題的元素有一個迭代器'it',那麼你可以將映射值移出局部變量,然後銷燬該元素:MyClass x = std :: move(it-> second); m.erase(it);' –