C++编写程序对数据进行搜索排序后写入本地文件里

题目描述

有N组(N分别是10万、25万、50万和80万)商品数据,每组数据包含1个序号和1个价格。 请进行搜索和排序。

1,找出所有价格为9856的商品序号并按行打印,并在程序最后显示程序的运行时间。

2,按价格由低到高对这N组数据进行排序。排序后的数据写入当前目录中的sortdata.txt文件中,并在程序中显示程序的运行时间。

完整代码

#include <iostream>
#include <fstream>
#include <vector>
#include <chrono>
#include <algorithm>

struct Product {
    int id;
    int price;
};

// 按价格由低到高排序的比较函数
bool compareByPrice(const Product& p1, const Product& p2) {
    return p1.price < p2.price;
}

int main() {
    std::vector<std::vector<Product>> allData; // 存储所有商品数据的二维向量
    std::vector<int> targetIds; // 存储价格为9856的商品序号

    // 读取数据
    std::vector<int> groupSizes = {100000, 250000, 500000, 800000}; // 每组数据的大小
    for (int i = 0; i < groupSizes.size(); ++i) {
        std::vector<Product> groupData(groupSizes[i]);
        std::string fileName = "data" + std::to_string(i+1) + ".txt";
        std::ifstream inputFile(fileName);
        if (!inputFile) {
            std::cerr << "无法打开文件:" << fileName << std::endl;
            return 1;
        }
        for (int j = 0; j < groupSizes[i]; ++j) {
            inputFile >> groupData[j].id >> groupData[j].price;
            if (groupData[j].price == 9856) {
                targetIds.push_back(groupData[j].id);
            }
        }
        inputFile.close();
        allData.push_back(groupData);
    }

    // 打印价格为9856的商品序号
    std::cout << "价格为9856的商品序号如下:" << std::endl;
    for (int id : targetIds) {
        std::cout << id << std::endl;
    }

    // 对所有数据进行排序
    auto startTime = std::chrono::high_resolution_clock::now();
    for (auto& data : allData) {
        std::sort(data.begin(), data.end(), compareByPrice);
    }
    auto endTime = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> duration = endTime - startTime;

    // 将排序后的数据写入文件
    std::ofstream outputFile("sortdata.txt");
    if (!outputFile) {
        std::cerr << "无法打开文件:sortdata.txt" << std::endl;
        return 1;
    }
    for (const auto& data : allData) {
        for (const auto& product : data) {
            outputFile << product.id << " " << product.price << std::endl;
        }
    }
    outputFile.close();

    // 输出程序运行时间
    std::cout << "程序运行时间:" << duration.count() << " 秒" << std::endl;

    return 0;
}

在这个示例程序中,我们首先定义了一个Product结构体,用于存储商品的序号和价格。

然后,我们使用一个二维向量allData来存储所有商品数据,每组数据对应一个内部向量。同时,我们使用一个向量targetIds来存储价格为9856的商品序号。

接下来,我们依次读取每组数据的文件,并将数据存储到相应的内部向量中。在读取数据的过程中,如果发现价格为9856的商品,则将其序号存入targetIds向量。

然后,我们打印出价格为9856的商品序号。

接着,我们使用std::sort函数对所有数据进行排序。我们定义了一个比较函数compareByPrice,用于按价格由低到高排序。

在排序完成后,我们将排序后的数据写入文件sortdata.txt中。

最后,我们使用std::chrono库来计算程序的运行时间,并输出到控制台。

请注意,你需要准备好每组数据对应的文本文件,文件名分别为data1.txtdata2.txtdata3.txtdata4.txt,并确保文件中的数据格式正确(每行包含一个序号和一个价格,以空格分隔)。

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享