C++新手求助:随机整数存储、去重及查询实现
C++实现随机三元组存储、去重与查询功能
以下是满足你需求的完整代码,包含多行存储、A值去重和查询功能:
#include <iostream> #include <vector> #include <unordered_set> #include <random> #include <limits> // 封装每组A、B、C数据的结构体 struct Data { int a; int b; int c; }; int main() { // 初始化随机数生成器(C++11及以上推荐用法) std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<int> dist(1, 100); // 生成1-100的随机整数 std::vector<Data> data_list; // 存储多组A、B、C数据 std::unordered_set<int> existing_a; // 记录已存在的A值,用于去重 // 生成10组去重后的随机数据(可根据需求调整数量) const int target_count = 10; while (data_list.size() < target_count) { int a = dist(gen); int b = dist(gen); int c = dist(gen); // 检查A值是否已存在,不存在则存储 if (existing_a.find(a) == existing_a.end()) { data_list.push_back({a, b, c}); existing_a.insert(a); } } // 输出多行表格形式的数据 std::cout << "存储的多行数据:\n"; std::cout << "A\tB\tC\n"; for (const auto& item : data_list) { std::cout << item.a << "\t" << item.b << "\t" << item.c << "\n"; } // 查询功能:根据输入的A值查找对应B、C std::cout << "\n请输入要查询的A值:"; int query_a; std::cin >> query_a; // 处理非整数输入的情况 if (!std::cin) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "输入无效,请输入整数\n"; return 1; } bool found = false; for (const auto& item : data_list) { if (item.a == query_a) { std::cout << "找到匹配数据:B=" << item.b << ",C=" << item.c << "\n"; found = true; break; } } if (!found) { std::cout << "未找到A值为" << query_a << "的数据\n"; } return 0; }
功能实现说明
- 多行存储:通过
std::vector<Data>存储自定义结构体实例,每个结构体对应一行A、B、C数据,遍历vector即可直接输出多行表格格式。 - A值去重:使用
std::unordered_set<int>存储已出现的A值,每次生成新A后通过find()快速判断是否重复,避免存储重复A的行。 - 查询功能:读取用户输入的整数后,遍历存储的所有数据,匹配到对应A值时输出B、C,未匹配则给出提示。
代码优化点说明
- 替换了老旧的
rand()函数,使用C++11标准的随机数库,生成的随机数分布更均匀。 - 用结构体封装数据,比单纯用
vector<int>更清晰,便于后续维护和扩展。 - 加入了基础的输入错误处理,避免用户输入非整数导致程序异常。
内容的提问来源于stack exchange,提问作者ocat dota2
相关产品推荐
相关产品推荐

