所以我正在尝试创建一个小型停车场管理系统。我想做的是让用户输入他们的车辆编号,它会将其存储到一个数组中。我还希望其他元素,如登记时间、序列号、车辆类型等,与车辆编号一起存储。
我想知道如何使用多维数组将我提到的所有内容存储到车辆编号中,这样当用户再次键入他们的车辆编号时,它将显示其中存储的所有其他元素。
对不起,我说得不够清楚。
第一步是使用结构来组织数据,例如:
struct Vehicle {
int id;
int serial;
VehicleType type;
};
第二个问题是什么是适合放置对象的容器。一个数组通常很好,因为你可以很容易地附加到它上面
std::vector<Vehicle> vehicles;
然而,每当你想根据车辆id查找车辆时,你都需要浏览所有车辆才能找到匹配的车辆。地图会更有效。有几种变体,但对于初学者来说,常规的变体就可以了:
std::map<int, Vehicle> vehicles;
插入示例:
// given int vin, int serial
vehicles[vin] = {vin, serial, VehicleType::Car}
一种替代方案是std::unordered_map
。
您需要熟悉这些容器,以便了解它们的正确使用和优缺点。这里有一个很好的入门:如何在map和undreded_map之间进行选择?
听起来你在寻找类似地图的东西:https://www.cplusplus.com/reference/map/map/其中密钥是您的车辆编号,映射值是车辆的详细信息(无论您想在其中添加什么(。
编辑:以为例
std::map<int, vehicle> vehicleMap;
要正确使用vehicleMap
,您应该
- 定义类型为
vehicle
的struct
或class
- 创建要使用的
vehicle
类型的对象 - 将所需的详细信息添加到
vehicle
对象 - 将
vehicle
对象插入到具有vehicleMap.insert(int, vehicle)
的映射中
然后您可以使用vehicleMap.find(<int>);
检索车辆的所有详细信息。:(
您可以始终为此目的使用地图:
std::map<int, Vehicle> vehicle_data;
这里有一个简单的例子:
#include <iostream>
#include <string>
#include <map>
class Vehicle
{
public:
std::string name;
Vehicle(std::string _name) : name(_name) { }
};
int main()
{
std::map<int, Vehicle> vehicle_data;
vehicle_data.insert({ 1, Vehicle("vehicle name 1")});
vehicle_data.insert({ 3, Vehicle("vehicle name 3") });
vehicle_data.insert({ 2, Vehicle("vehicle name 2") });
auto it1 = vehicle_data.find({ 1 });
auto it2 = vehicle_data.find({ 2 });
auto it3 = vehicle_data.find({ 4 });
if (it1 != vehicle_data.end()) std::cout << it1->second.name << std::endl;
if (it2 != vehicle_data.end()) std::cout << it2->second.name << std::endl;
if (it3 != vehicle_data.end()) std::cout << it3->second.name << std::endl;
}
在上面的代码中,我在vehicle_data
中插入了3个车辆,然后我使用find()
来获得指向int值为1
、2
和4
的元素的迭代器,然后打印第二个元素(车辆(的名称。