题目描述
有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.txt
、data2.txt
、data3.txt
和data4.txt
,并确保文件中的数据格式正确(每行包含一个序号和一个价格,以空格分隔)。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END