設置我寫的函數動態變化的std ::通過路口
void update(set<int> &dynamic, const set<int> &compare){
set<int> res_set;
set_intersection(dynamic.begin(), dynamic.end(), compare.begin(), compare.end(),
std::inserter(res_set, res_set.end()));
dynamic = res_set;
}
不過,我想知道如果這實際上使得res_set
第一,然後將其分配給dynamic
複印件(這將是低效),還是隻分配已存儲在內存中的變量dynamic
到res_set
(這是有效的,我想要的)。我不想複製一個集合,裏面可能有非常多的元素,從而使整個程序變慢。
我的目標是能夠有效地改變dynamic
,我通過傳遞許多不同的set<int>
s轉換compare
(這將會對搜索樹更有效的修剪路徑)調用該函數。
有沒有辦法做到這一點?
謝謝。
集合並不是宇宙中最快速的事物。如果性能確實是一個問題,那麼具有獨特元素的排序向量更快,但顯然難以維護。 – 2015-03-13 19:07:51
你爲什麼不簡單地返回集?使用'std :: move()'應該是相當快且完全可讀的。如果你被困在古老的C++中,使用'swap()'函數來替換而不復制。或者,重寫您的算法以便就地修改目標集。最後,我認爲有一個來自STL的算法可以做到這聽起來像... – 2015-03-13 19:10:03
你必須重新實現'set_intersection'邏輯來移除元素。 – Jarod42 2015-03-13 19:27:30