У меня есть класс List, который содержит вектор с уникальными указателями на объекты ListItem.Я хотел бы создать функцию, которая возвращает итератор для конкретного ListItem.Сравнение будет выполнено с использованием строкового аргумента для сравнения с переменной имени строки ListItem.
Я безуспешно пытался использовать std :: find, find_if и т. Д.Когда я перебрал вектор, я не могу понять, как получить доступ к переменной name в объекте ListItem, чтобы сделать сравнение.
#include <iostream>
#include <vector>
#include <memory>
#include <string>
#include <iterator>
#include <algorithm>
class ListItem {
private:
double quantity{ 0 };
std::string weightUnit;
std::string name;
public:
ListItem(double quantity, std::string weightUnit, std::string name) : quantity{ quantity }, weightUnit{ weightUnit }, name{ name } {}
~ListItem() {}
double getQuantity() { return quantity; }
std::string getWeightUnit() { return weightUnit; }
std::string getName() { return name; }
};
class List {
private:
std::vector<std::unique_ptr<ListItem>>mylist;
public:
std::vector<std::unique_ptr<ListItem>>::iterator search(std::string str) {
/* This is where I'm stuck */
}
void removeListItem(std::string &name) {
auto it = search(name);
if (it != mylist.end()) {
mylist.erase(it);
}
}
void addListItem(double quantity, std::string weightUnit, std::string name) {
mylist.push_back(std::make_unique<ListItem>(quantity, weightUnit, name));
}
};
int main() {
auto list = std::make_unique<List>();
list->addListItem(2, "kg", "beef");
list->addListItem(4, "lbs", "eggs");
list->search("test");
}