gpt4 book ai didi

c++ - 在 std::find 方法中比较类对象

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:38 26 4
gpt4 key购买 nike

我是 C++ 编程的新手。我需要在自定义对象的 vector 中找到一个特定的对象,但这个 vector 在另一个类对象中。所以我想我需要定义一个自定义运算符 == 但我不知道如何定义,尤其是在哪里定义。请帮助我,我快疯了。希望我的解释很清楚。在我的类的头文件下面。

#ifndef MAGAZZINO_H
#define MAGAZZINO_H

#include <iostream>
#include <string>
#include <vector>
#include "new_farmaco_magazzino.h"
#include "sacca.h"
#include "ricetta.h"
#include <algorithm>




using namespace std;

class farmaco_magazzino;
class sacca;
class ricetta;

struct index_detect{
int index_large;
int index_small;
};

struct da_scaricare{
string ID_drug;
eLiquid ID_bag;
int num_vial;
double capacity;
};

struct possible_scarico{
vector<farmaco_magazzino> vial_large;
vector<farmaco_magazzino> vial_small;
vector<sacca> sacche_large;
vector<sacca> sacche_small;
};

class magazzino {

public:

vector<farmaco_magazzino> lista_small;
vector<farmaco_magazzino> lista_large;
vector<sacca> SaccheSmall;
vector<sacca> SaccheLarge;

int new_capienza_SaccheLarge; //indica il numero di postazioni totali per le sacche large
int new_capienza_SaccheSmall; //indica il numero di postazioni totali per le sacche small
int new_capienza_SiringheLarge; //indica il numero di postazioni totali per le siringhe large
int new_capienza_SiringheSmall; //indica il numero di postazioni totali per le siringhe small
int new_capienza_VialLarge; // indica il numero di postazioni totali per i vial large
int new_capienza_VialSmall; // indica il numero di postazioni totali per i vial small

int pos_disp_FarmacoLarge;
int pos_disp_FarmacoSmall;
int pos_disp_SaccheLarge;
int pos_disp_SaccheSmall;
int pos_disp_SiringheLarge;
int pos_disp_SiringheSmall;

//scarico possibile sulla base dei mismatch valido per magazzino di stoccaggio
possible_scarico download;


//default constructor
magazzino();
//overload constructor
magazzino(int);
//destructor
~magazzino();

//accessor function
int getNum_sacche(string); //restituisce il numero di sacche contenute nel magazzino
//int getPos_totali(); //restituisce la capienza del magazzino
int get_NumSiringhe(string);//restituisce il numero di siringhe contenute nel magazzino
int getPos_disponibili(string,string); //restituisce le postazioni disponibili del magazzino
//void setPos_disponibili(int);

//mutator function
void setNum_sacche(string,int);
void setNum_siringhe(string,int);
void update_magazzino(double*,vector<index_detect>&,magazzino&,string);//per magazzino interno
bool update_magazzino(ricetta&,vector<index_detect>&,magazzino&,magazzino&,string);// per magazzino stoccaggio
void load_magazzino(magazzino&,string,double,double,string,string,int);//carico magazzino interno
void load_magazzino(magazzino&,string,double,string,string,int);// carico magazzino stoccaggio
int postazioni_libere(int,vector<farmaco_magazzino>&);
int num_object(int,int); // calcola il numero di sacche/siringhe contenute nel magazzino
bool use_vial(double*,magazzino&,int,string); //per magazzino interno
bool use_vial(ricetta&,magazzino&,magazzino&,int,string); //per magazzino stoccaggio
bool use_bag(double*,magazzino&,int,string);//per magazzino interno
bool use_bag(ricetta&,magazzino&,magazzino&,int,string);// per magazzino stoccaggio
bool check_empty(string);
vector<index_detect> find_lista(magazzino&,string,eContainerType); //trova elemento all'interno della lista dei vials oppure della sacche
void svuota(magazzino&); //funzione di svuotamento del magazzino interno
void clear_null(magazzino&,string); //elimina farmaci finiti
void sorting(vector<double>&); //ordine i vettori di capacità o residual all'interno dello stesso farmaco
void sorting_bag(vector<sacca>&,string);//ordine i vettori di capacità all'interno del vettore saccche



// int magazzino::calcolo_pos_libere(int,int,vector<int>); //calcola il numero di postazioni libere
private:
int new_num_SaccheLarge; // numero di sacche con capacità compresa tra 250cc e 500cc
int new_num_SaccheSmall; // numero di sacche con capacità <250cc
int new_NumSiringheLarge; // siringhe da 50ml utilizzate per dispensare farmaco in sacca
int new_NumSiringheSmall; // siringhe da 5ml utilizzate come contenitore di destinazione


};

bool quantità_nulla(farmaco_magazzino&);


#endif

这是包含 2 个 farmaco_magazzino 类型 vector 的主类,我需要在其中找到特定元素;这里是类 farmaco_magazzino 的代码。

  #ifndef NEW_FARMACO_MAGAZZINO_H
#define NEW_FARMACO_MAGAZZINO_H

#include <iostream>
#include <string>
#include "magazzino.h"

using namespace std;

enum eContainerType {
_vial,
_bag
};



class farmaco_magazzino {
public:

// default constructor
farmaco_magazzino();
//overload constructor
farmaco_magazzino(string,double,eContainerType,int);
// destructor
~farmaco_magazzino();

vector<double> capacity; // capacità dei contenitori in cui è presente il farmaco (vial o bag)
vector<double> residual; // farmaco residuo nei contenitori di destinazione nel caso del magazzino interno

//accessor functions

string get_IDfarmaco(); //restituisce ID farmaco contenuto in magazzino
double get_quantità_farmaco(); //restituisce quantità di farmaco contenuta in magazzino
eContainerType get_container_type(); //restituisce il tipo di contenitore in cui è contenuto il farmaco
int get_num_vials(int); //restituisce il numero di vials di tipo 1/2 dello specifico farmaco contenuto nel magazzino
double getPriority(); //restituisce la priorità associata alla presenza in magazzino del farmaco
int get_vial_used(); //restituisce il tipo di vial utilizzato per la ricetta i-esima

//mutator functions

void farmaco_magazzino::setPriority(double);
void farmaco_magazzino::set_quantità_farmaco(double);
void farmaco_magazzino::set_num_vials(int); //incrementa il numero di vials di tipo 1 e 2
void farmaco_magazzino::set_vial_used(int);

int new_num_Vial;//numero vials
//int new_num_VialSmall; //numero vials di tipo small


private:
string new_IDfarmaco; //definire tipo enum
double new_quantità_farmaco;
eContainerType new_container_type; // se farmaco è contenuto in vial oppure in sacca
double new_priority;
int new_vial_used; // new_vial_used=1->vial large; new_vial_used=2->vial small
};


#endif

感谢您的帮助。

最佳答案

我建议使用 map 而不是 vector 。您从 get_IDfarmaco 获得的 ID 希望是唯一的,如果是这样,您可以将其用作 map 的键。事实上,如果你想使用查找,你将需要使用 map 。因为 vector 没有那个方法。还是您正在使用类似 boost 的东西?

如果它是 STL::vector,那么您需要遍历该 vector 并单独比较每个对象,如果我没记错的话,它是 O=n。有了 map 你就会有 O=log(n)

关于c++ - 在 std::find 方法中比较类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com