c++ - 如何使用字符串返回指向对象的唯一指针向量的迭代器以查找对象?
问题描述
我有一个 List 类,其中包含一个带有指向 ListItem 对象的唯一指针的向量。我想创建一个将迭代器返回到特定 ListItem 的函数。将使用字符串参数与 ListItem 字符串名称变量进行比较。
我试过使用 std::find、find_if 等,但没有成功。当我遍历向量时,我不知道如何访问 ListItem 对象中的 name 变量来进行比较。
#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 中的参数类型将是 a unique_ptr<ListItem>
。(在 c++14 中,您可以只使用auto
)
推荐阅读
- python - Detectron MetadaCatalog 和 DatasetCatalog 导入失败
- prolog - Prolog:查找二叉树中级别的节点数
- java - 带有 jackson-datatype-jsr310 版本 2.12.3 的 InvalidDefinitionException
- docker-compose - 使用 Windows Server 2016 容器和 Windows Server 2019 主机运行具有 gMsa 和 hyper-v 隔离的应用程序时出现问题
- jquery - Ajax-JQuery-Chartjs Uncaught TypeError:响应未定义
- java - 将元素移动到java数组的末尾
- python - `TypeError:当我在 jupyter notebook 上运行基本的 M RCNN 程序时,'NoneType' 类型的对象没有 len()` 错误
- java - Java中单个字符串数组中两个整数数组的元素之和
- rhel - 在 lsblk RHEL 8.1 中找不到 /opt /var /tmp
- java - 线性布局按钮之间的垂直空间“权重”