2009-05-25 62 views
65

我想這是一個簡單的問題。我需要做這樣的事情:std :: back_inserter爲std :: set?

std::set<int> s1, s2; 
s1 = getAnExcitingSet(); 
std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor()); 

當然,std::back_inserter不起作用,因爲沒有push_backstd::inserter還需要一個迭代器?我沒有使用std::inserter,所以我不知道該怎麼做。

有沒有人有想法?


當然,我的其他選擇是使用 s2的矢量,然後稍後再進行排序。也許那樣更好?

回答

98

set沒有push_back,因爲元素的位置由集合的比較器確定。使用std::inserter,並將它傳遞.begin():然後

std::set<int> s1, s2; 
s1 = getAnExcitingSet(); 
transform(s1.begin(), s1.end(), 
      std::inserter(s2, s2.begin()), ExcitingUnaryFunctor()); 

的插入迭代器將調用s2.insert(s2.begin(), x)其中x是傳遞到迭代器的值時,寫入。該集使用迭代器作爲插入的提示。你可以使用s2.end()

+0

適用於std :: map(你節省了我的時間,謝謝)。 – FreeNickname 2014-06-22 11:25:31