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++》第二版