将地图复制到矢量
我必须将 std::map 中的某些元素复制到向量中。 它应该像这个循环一样工作:
typedef int First;
typedef void* Second;
std::map<First, Second> map;
// fill map
std::vector<Second> mVec;
for (std::map<First, Second>::const_iterator it = map.begin(); it != map.end(); ++it) {
if (it->first % 2 == 0) {
mVec.push_back (it->second);
}
}
因为我想避免使用任何函子,而是使用 boost::lambda ,所以我尝试使用 std::copy ,但无法正确执行。
std::copy (map.begin(), map.end(), std::back_inserter(mVec)
bind(&std::map<int, void*>::value_type::first, _1) % 2 == 0);
我是 lambda 表达式的新手,我不知道如何正确使用它们。 我在 Google 或 StackOverflow 上也没有得到任何有用的结果。 这个问题类似
I have to copy certain elements from a std::map into a vector.
It should work like in this loop:
typedef int First;
typedef void* Second;
std::map<First, Second> map;
// fill map
std::vector<Second> mVec;
for (std::map<First, Second>::const_iterator it = map.begin(); it != map.end(); ++it) {
if (it->first % 2 == 0) {
mVec.push_back (it->second);
}
}
Since I'd like to avoid using any functors, but use boost::lambda instead, I tried using std::copy, but can't get it right.
std::copy (map.begin(), map.end(), std::back_inserter(mVec)
bind(&std::map<int, void*>::value_type::first, _1) % 2 == 0);
I'm new to lambda expressions, and I can't figure it out how to use them correctly.
I didn't get any useful results on Google or StackOverflow either.
This question is similar
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在STL 中你需要的是一个transform_if 算法。那么你必须写:
transform_if的代码取自这个不相关的问题是:
我认为没有其他方法可以使用 STL 算法同时执行这两个步骤(转换和条件复制)。
What you would need in STL would be a transform_if algorithm. Then you would have to write:
The code for transform_if is taken from this unrelated question and it is:
I think there is no other way to perform both steps (transform and conditional copy) at once using STL algorithms.
您可以使用 升压范围适配器来实现这一点。
You can use boost range adaptors to achieve that.