c++ 派生类 文本查询程序再探
发布人:shili8
发布时间:2025-03-13 20:40
阅读次数:0
**C++ 派生类文本查询程序**
在前面的文章中,我们已经实现了一个基本的文本查询程序。然而,这个程序有几个局限性,例如:
* 只能处理简单的查找任务,如查找特定关键字或短语。
* 没有提供任何排序功能。
* 查找结果没有进行过滤。
为了解决这些问题,我们将在本文中扩展这个程序,使其能够支持更复杂的查找任务,并且添加一些额外的功能,如排序和过滤。
**类设计**
我们将定义一个基类 `Query`,用于表示一个查询。这个类将包含以下成员变量:
* `keyword`:关键字或短语。
* `sort_by`:排序方式(例如按时间、按重要性等)。
* `filter_by`:过滤条件。
cppclass Query {
public:
std::string keyword;
std::string sort_by;
std::string filter_by;
// 构造函数 Query(std::string keyword, std::string sort_by = "", std::string filter_by = "") : keyword(keyword), sort_by(sort_by), filter_by(filter_by) {}
};
我们还将定义一个派生类 `TextQuery`,用于表示一个文本查询。这个类将继承自基类 `Query`。
cppclass TextQuery : public Query {
public:
// 构造函数 TextQuery(std::string keyword, std::string sort_by = "", std::string filter_by = "") : Query(keyword, sort_by, filter_by) {}
// 查找结果的排序和过滤功能 void sort_results();
void filter_results();
private:
// 查找结果列表 std::vector<std::pair<std::string, int>> results;
};
**查找结果的排序和过滤**
在 `TextQuery` 类中,我们将实现两个成员函数: `sort_results()` 和 `filter_results()`。
* `sort_results()`:根据指定的排序方式对查找结果进行排序。
* `filter_results()`:根据指定的过滤条件对查找结果进行过滤。
cppvoid TextQuery::sort_results() {
// 根据 sort_by 的值选择排序方式 if (sort_by == "time") {
std::sort(results.begin(), results.end(), [](const auto& a, const auto& b) {
return a.second < b.second;
});
} else if (sort_by == "importance") {
std::sort(results.begin(), results.end(), [](const auto& a, const auto& b) {
return a.second > b.second;
});
}
}
void TextQuery::filter_results() {
// 根据 filter_by 的值选择过滤条件 if (filter_by == "keyword") {
std::vector<std::pair<std::string, int>> filtered_results;
for (const auto& result : results) {
if (result.first.find(keyword) != std::string::npos) {
filtered_results.push_back(result);
}
}
results = filtered_results;
} else if (filter_by == "time") {
std::vector<std::pair<std::string, int>> filtered_results;
for (const auto& result : results) {
if (result.second >=2020) {
filtered_results.push_back(result);
}
}
results = filtered_results;
}
}
**查找结果的展示**
在 `TextQuery` 类中,我们将实现一个成员函数 `display_results()`,用于展示查找结果。
cppvoid TextQuery::display_results() {
// 展示排序和过滤后的结果 for (const auto& result : results) {
std::cout << "关键字: " << keyword << ", 时间: " << result.second << ", 内容: " << result.first << std::endl;
}
}
**测试**
我们将创建一个 `TextQuery` 对象,并进行一些测试。
cppint main() {
// 创建 TextQuery 对象 TextQuery query("关键字", "time");
// 添加查找结果 query.results.push_back({"内容1",2020});
query.results.push_back({"内容2",2019});
query.results.push_back({"内容3",2021});
// 排序和过滤结果 query.sort_results();
query.filter_results();
// 展示排序和过滤后的结果 query.display_results();
return0;
}
**结论**
在本文中,我们扩展了前面的文本查询程序,使其能够支持更复杂的查找任务,并且添加了一些额外的功能,如排序和过滤。我们定义了一个基类 `Query` 和一个派生类 `TextQuery`,并实现了相关成员函数。最后,我们进行了一些测试,以展示这些功能的效果。
**参考**
* C++语言规范(ISO/IEC14882:2017)
* 《C++ Primer》第五版* 《Effective C++》第二版

