当前位置:实例文章 » C#开发实例» [文章]c++ 派生类 文本查询程序再探

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

相关标签:c#c++windows开发语言
其他信息

其他资源

Top