gpt4 book ai didi

c++ - 返回映射中符合条件的一组键

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:29 25 4
gpt4 key购买 nike

首先我会给出一个具体的案例,我想看看它是否可以应用到一个普遍的问题上。

假设我有 map 。我想让所有的 key 都符合特定的标准。例如,所有包含“COL”的键。我天真的实现将是

template<typename T>
void Filter (map<string, T> & m, std:set<string> & result, const std::string& condition)
{
for(map<string,string> iter=m.begin();iter!m.end();iter++)
{
std::string key=iter->first;
size_t found=key.find(condition);
if (found!=string::npos)
result.insert(key);
}

}

实现这个的好方法是什么?

此外,当我想使用算法过滤 map 时,实现一般问题的好方法是什么?

最佳答案

这看起来像是 remove_copy_if 的候选对象。我已经使用 boost 编写了一些东西,它可能看起来很恶心,但提供了您的算法的概括。

#include <boost/iterator/transform_iterator.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <algorithm>
#include <map>
#include <set>
#include <string>

struct filter_cond : std::unary_function<std::string, bool> {
filter_cond(std::string const &needle):needle(needle) { }
bool operator()(std::string const& arg) {
return (arg.find(needle) == std::string::npos);
}
std::string needle;
};


int main() {
std::set<std::string> result;
typedef std::map<std::string, int> map_type;
map_type map;

std::remove_copy_if(
boost::make_transform_iterator(map.begin(),
boost::bind(&map_type::value_type::first, _1)),
boost::make_transform_iterator(map.end(),
boost::bind(&map_type::value_type::first, _1)),
std::inserter(result, result.end()),
filter_cond("foo")
);
}

我可能更喜欢手动循环。 C++1x 会让 lambda 表达式看起来真的好得多。

关于c++ - 返回映射中符合条件的一组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651012/

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