C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
C++ Find a string in struct list with old compiler GCC 4.4.0
我正在开发一个程序,该程序有一个基于结构的列表,用于存储一些文件属性数据。
struct files {
string name;
string size;
string owner;
};
下面介绍了列表变量
list<files> myfilecollection;
我想做的事情是检查myfilecollection中是否包含一些确定的文件名。基本上,我检查了这个示例帖子,并尝试编写这个函数:
bool isFileSensible(const string& filename)
{
auto match = std::find_if(myfilecollection.cbegin(), myfilecollection.cend(), [name] (const files& s) {
return s.name == filename;
});
return match != myfilecollection.cend();
}
这个实现可以与GCC 9.2.0一起工作,但我需要使这个功能在GCC 4.4.4上工作,甚至不符合C++11。为GCC 4.4.0重新实现此功能的最佳方式是什么?
谨致问候,F.Borges
lambda只不过是编写函子的简短形式。您可以返回到编写一个行为与相同的函子
bool isFileSensible(const string& filename)
{
struct FindFilename
{
std::string filename;
FindFilename(std::string filename) : filename(filename) {}
bool operator()(const files& obj)
{
return obj.name == filename;
}
};
std::list<files>::const_iterator match = std::find_if(myfilecollection.cbegin(), myfilecollection.cend(), FindFilename(filename));
return match != myfilecollection.cend();
}
我已经将FindFilename
放在函数的作用域中,这样它就不会污染全局命名空间。如果你想在其他地方重用这个函子,你可以把它移到全局范围。
您使用的是auto
和lambda,它们都是C++11。幸运的是,在您的情况下,两者都可以简单地替换。
Lambdas基本上只是函子类的语法糖,因此您可以使用:
struct compare_files_by_name {
std::string target;
compare_files_by_name(const std::string& target) : target(target) {}
bool operator()(const files& f) {
return f.name == target;
}
};
而find_if
返回的是一个list<files>::const_iterator
。如果我们把这些放在一起,你会得到:
bool isFileSensible(const string& filename)
{
compare_files_by_name comp(filename);
std::list<files>::const_iterator match = std::find_if(myfilecollection.cbegin(), myfilecollection.cend(),comp);
return match != myfilecollection.cend();
}
PS:由于习惯了auto
,我觉得完全写出迭代器类型很奇怪。我可能会把它写成
return myfilecollection.cend() != std::find_if(....
只是为了避免拼写出迭代器类型。
相关文章:
- 没有为自己的结构调用列表推回方法
- 访问类lintalizer列表中的结构元素
- 将大括号括起来的初始值设定项列表作为结构返回
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- C++-将具有引用的长参数列表重构为结构
- 在C++中循环访问自定义结构列表的小问题
- 访问列表向量中的结构
- c ++数据输入并读回列表中的结构结构中的数组
- 如何在结构初始值设定项列表中实例化类
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 使用列表进行动态结构分配
- 如何从结构列表中筛选信息
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- C/C++intellisense 0.26.1不显示结构成员列表
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 列表结构和数组的奇怪问题
- 释放包含STL类的链接列表结构的内存
- c++游戏的列表结构