gpt4 book ai didi

c++ - 在 std::map 上使用 Lambda 函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:19:53 34 4
gpt4 key购买 nike

我想了解如何在 C++ 中使用 Lambda 函数

我正在使用自定义类型,如下所示:

struct my_toy_t {
uint32_t id;
cv::Rect box;
cv::Mat data;
}

typedef std::map<uint32_t, my_toy_t*> my_toy_map_t;

和:

int main() {

my_toy_map_t input_map;
my_toy_map_t output_map;

// Some insertions in input_map...

my_toy_map_t::iterator it;
for (it = input_map.begin(); it != input_map.end(); ++it)
{
if (check_cond(it->second->box)) {
output_map.insert(std::make_pair(it->first, it->second));
input_map.erase(it->first);
}
}
return 0;
}

bool check_cond(cv::Rect box) {
if (box.area > 100)
return true;
else
return false;
}

可能会注意到 my_toy_map_t只是一个std::map<uint32_t, my_toy_t*> , 和 check_cond函数检查一个简单的条件。

是否可以使用 Lamba 函数翻译此代码(如果 output map 返回 input_map,则插入 check_cond 并从 true 移除)?

最佳答案

可能是 std::copy_ifstd::inserter ?

std::copy_if(input_map.begin(),input_map.end(),
std::inserter(output_map,output_map.end()) ,
[](const std::pair<uint32_t, my_toy_t*>& x ){
return (x.second)->box.area > 100;
}
);

对于删除我可以想到这个:

my_toy_map_t temp;

std::remove_copy_if(input_map.begin(), input_map.end(),
inserter(temp, temp.end()),
[](const std::pair<uint32_t, my_toy_t*>& x ){
return (x.second)->box.area > 100;
} );

input_map.swap(temp);

关于c++ - 在 std::map 上使用 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18250977/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com