我如何将所有矢量元素存储在散列 table C++ 中
How can i store all my vector elements in a hash table c++
我完成的代码##
class vehicle
{
public:
vehicle();
virtual ~vehicle();
void addVehicle();
void deleteVehicle();
void printvehicle(vehicle v);
void show();
void showleft();
void vehcileLoad();
protected:
private:
std::string pltno;
date dt;
lime arrive;
lime departure;
};
int static totalvehicle=0,totalcar=0,totalamt=0,i=0,z=0;
void vehicle::addVehicle()
{
vehicle *v = new vehicle;
std::cin.ignore();
std::cout<<"Enter vehicle number : ";
std::getline(std::cin, v->pltno);
std::cout<<"Enter arrival time in hours minutes and seconds : ";
std::cin>>v->arrive.hh>>v->arrive.col1>>v->arrive.mm>>v->arrive.col2>>v->arrive.ss;
std::cout<<"Enter date in day month and year: ";
std::cin>>v->dt.day>>v->dt.sym1>>v->dt.month>>v->dt.sym2>>v->dt.year;
veh.at(i).pltno=v->pltno;
veh.at(i).arrive.hh=v->arrive.hh;
veh.at(i).arrive.mm=v->arrive.mm;
veh.at(i).arrive.ss=v->arrive.ss;
veh.at(i).dt.day=v->dt.day;
veh.at(i).dt.month=v->dt.month;
veh.at(i).dt.year=v->dt.year;
我希望完成的事情
这是我拥有的代码的一部分 这也是我如何使用 v->pltno = ...
等将数据存储到向量中 我想知道如何将向量中的所有元素存储到散列中 table 请帮助我一无所知如何将所有带有 veh 和 vehleft 的项目存储到哈希中 table 1 用于停车中的车辆,1 用于离开的车辆
执行此类任务的代码是什么样的?
向量的其他代码
std::vector<vehicle> veh(100);
std::vector<vehicle> vehleft(100);
谢谢?
假设您所有的车辆对象都存储在 std::vector<Vehicle>
中,使用 std::unordered_map<std::string, Vehicle> 是一种非常简单的获取散列 table 并填充车辆的方法:
#include <unordered_map>
#include <vector>
#include <string>
//...
class Vehicle
{
//...
};
void foo()
{
std::vector<Vehicle> veh(100);
//...
std::unorderd_map<std::string, Vehicle> mapVehicle;
for (auto& v : veh)
{
// add the vehicle v to the hash table
mapVehicle[v.pltNo] = v;
}
//...
}
完成后,您可以使用车牌号查找车辆:
Vehicle& v = mapVehicle["ABC123"]; // this is the vehicle with license plate ABC123
或者为了安全起见(因为使用 [] 进行搜索会在未找到的情况下添加一个空条目),您可以使用 std::unordered_map::find()
:
检查车辆是否存在
auto iter = mapVehicle.find("ABC123");
if (iter != mapVehicle.end())
{
Vehicle& v = iter->second;
}
我完成的代码##
class vehicle
{
public:
vehicle();
virtual ~vehicle();
void addVehicle();
void deleteVehicle();
void printvehicle(vehicle v);
void show();
void showleft();
void vehcileLoad();
protected:
private:
std::string pltno;
date dt;
lime arrive;
lime departure;
};
int static totalvehicle=0,totalcar=0,totalamt=0,i=0,z=0;
void vehicle::addVehicle()
{
vehicle *v = new vehicle;
std::cin.ignore();
std::cout<<"Enter vehicle number : ";
std::getline(std::cin, v->pltno);
std::cout<<"Enter arrival time in hours minutes and seconds : ";
std::cin>>v->arrive.hh>>v->arrive.col1>>v->arrive.mm>>v->arrive.col2>>v->arrive.ss;
std::cout<<"Enter date in day month and year: ";
std::cin>>v->dt.day>>v->dt.sym1>>v->dt.month>>v->dt.sym2>>v->dt.year;
veh.at(i).pltno=v->pltno;
veh.at(i).arrive.hh=v->arrive.hh;
veh.at(i).arrive.mm=v->arrive.mm;
veh.at(i).arrive.ss=v->arrive.ss;
veh.at(i).dt.day=v->dt.day;
veh.at(i).dt.month=v->dt.month;
veh.at(i).dt.year=v->dt.year;
我希望完成的事情
这是我拥有的代码的一部分 这也是我如何使用 v->pltno = ...
等将数据存储到向量中 我想知道如何将向量中的所有元素存储到散列中 table 请帮助我一无所知如何将所有带有 veh 和 vehleft 的项目存储到哈希中 table 1 用于停车中的车辆,1 用于离开的车辆
执行此类任务的代码是什么样的?
向量的其他代码
std::vector<vehicle> veh(100);
std::vector<vehicle> vehleft(100);
谢谢?
假设您所有的车辆对象都存储在 std::vector<Vehicle>
中,使用 std::unordered_map<std::string, Vehicle> 是一种非常简单的获取散列 table 并填充车辆的方法:
#include <unordered_map>
#include <vector>
#include <string>
//...
class Vehicle
{
//...
};
void foo()
{
std::vector<Vehicle> veh(100);
//...
std::unorderd_map<std::string, Vehicle> mapVehicle;
for (auto& v : veh)
{
// add the vehicle v to the hash table
mapVehicle[v.pltNo] = v;
}
//...
}
完成后,您可以使用车牌号查找车辆:
Vehicle& v = mapVehicle["ABC123"]; // this is the vehicle with license plate ABC123
或者为了安全起见(因为使用 [] 进行搜索会在未找到的情况下添加一个空条目),您可以使用 std::unordered_map::find()
:
auto iter = mapVehicle.find("ABC123");
if (iter != mapVehicle.end())
{
Vehicle& v = iter->second;
}