2009-05-25 63 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