【发布时间】:2012-06-10 14:48:41
【问题描述】:
是否可以使用 STL 算法将 std::map 值深度复制到 std::set?
我不想显式插入新集合。
我不想明确地这样做:
std::map<int, double*> myMap; //filled with something
std::set<double*> mySet;
for (std::map<int, double*>::iterator iter = myMap.begin(); iter!=myMap.end(); ++iter)
{
mySet.insert(iter->second);
}
但要找到一种更简洁、更优雅的方式来执行此操作,并使用深度复制的值。
【问题讨论】:
-
添加一些代码。您是要复制
map的key_type还是value_type? -
如果有重复怎么办?你应该改用
multiset吗? -
不会有重复,如果有,不重要。
-
您可以使用来自 SGI 的 STL 或来自 a previous answer 的
select2nd。 -
或者,使用提取映射键或值的转换迭代器。我在an answer to another question 中提供了几个键迭代器的实现。将其中任何一个转换为值迭代器将是一项微不足道的任务。当你说你想要一个“深拷贝”时,你真正应该做的是将指针包装在一个句柄类中,该句柄类在复制时执行“深”拷贝。
标签: algorithm stl copy stdmap stdset