采用back_inserter以使用Boost迭代器采用器从MAP插入到列表中
adopt back_inserter to insert to list from map using boost iterator adopters
std::copy(map.begin(), map.end(), std::back_inserter(list))
这就是我想要实现的..从地图到列表i->second
项目。是否有任何可以使用的提升迭代器采用器?
我以为transform_iterator会起作用。 这就是我试图做的事情。
std::map<int, std::string> map;
std::list<std::string> list;
std::copy(
boost::make_transform_iterator(map.begin(),
boost::bind(&std::pair<int, std::string>::second, _1)),
boost::make_transform_iterator(map.end(),
boost::bind(&std::pair<int, std::string>::second, _1)),
std::back_inserter(list));
我实际上是在std::set_intersection
上申请 这不将函子作为函数参数 所以我不能使用 std::transform
并传递函数。(附上实际代码)
typedef std::map<khut::point::value_type, khut::diagonal> storage_type;
storage_type repo_begining;
storage_type repo_ending;
storage_type::const_iterator lower_it = repo_begining.lower_bound(diagonal.begining().y());
storage_type::const_iterator upper_it = repo_ending.lower_bound(diagonal.ending().y());
std::list<khut::diagonal> diagonals_intersecting;
std::set_intersection(lower_it, repo_begining.end(), repo_ending.begin(), upper_it, std::back_inserter(diagonals_intersecting));
注意:我无法使用 C++11
问题出在value_type
中。 std::map<int, std::string>::value_type
不是std::pair<int, std::string>
而是std::map<const int, std::string>
所以一旦我将代码更改为
std::copy(
boost::make_transform_iterator(map.begin(),
boost::bind(&std::pair<const int, std::string>::second, _1)),
boost::make_transform_iterator(map.end(),
boost::bind(&std::pair<const int, std::string>::second, _1)),
std::back_inserter(list));
成功了
相关文章:
- 将重物插入std::map
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 找不到最新插入到 std::map 中的键
- 在 std::map 中插入数组元素
- 插入 std::set 作为 std::map 的键
- 通过构造函数插入 std::map
- 从元组向 std::map 插入值
- 为什么 std::map 插入与 c# 字典插入相比如此缓慢
- 速度/效率:我应该并行化这个std::map插入吗
- std::map 插入错误:没有运算符"<"与这些操作数匹配
- stl::map 插入一个带有约束的值
- stl:map插入值时出错
- std::map插入另一个map
- std::map:插入密钥后,它是否可以复制和移动密钥
- 为什么我的程序在向MAP插入值时会停止
- 不创建临时值的Std::map插入
- 将typedef map插入哈希表
- 采用back_inserter以使用Boost迭代器采用器从MAP插入到列表中
- map -插入一个嵌套结构体
- c++ map插入不希望的行为