gpt4 book ai didi

c++ - 如何使用字符串返回一个指向对象的唯一指针 vector 的迭代器来查找对象?

转载 作者:行者123 更新时间:2023-11-28 04:14:27 26 4
gpt4 key购买 nike

我有一个 List 类,它包含一个带有指向 ListItem 对象的唯一指针的 vector 。我想创建一个将迭代器返回到特定 ListItem 的函数。比较将使用字符串参数与 ListItem 字符串名称变量进行比较。

我试过使用 std::find、find_if 等,但没有成功。当我迭代 vector 时,我不知道如何访问 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");

}

最佳答案

您需要捕获 str您用作谓词的 lambda 中的参数。

   std::vector<std::unique_ptr<ListItem>>::iterator search(std::string str) {
auto tester = [str](std::unique_ptr<ListItem>& li) { return li->getName() == str; };
return std::find_if(mylist.begin(), mylist.end(), tester);
}

另请注意,lambda 中的参数类型将为 unique_ptr<ListItem> . (在 c++14 中你可以只使用 auto )

关于c++ - 如何使用字符串返回一个指向对象的唯一指针 vector 的迭代器来查找对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958976/

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