gpt4 book ai didi

c++ - 如何将 Lambda 表达式与自定义类对象一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:09 25 4
gpt4 key购买 nike

尝试在 STL::find 中使用 Lambda 表达式来定位 vector 中的特定对象

我已经根据几个示例编写了我的代码,并尝试了 Lambda、捕获等的许多不同变体。我已经为我的类重载了“==”运算符(不确定在这种情况下是否需要,因为我实际上并不是在比较对象与对象,而是在比较 object.property 与 object.property)

//MAIN.cpp

#include <iostream>
#include <vector>
#include <algorithm>
#include "Employee.h"
using namespace std;

int main()
{
std::vector<Employee> staff
{
{ "Kate", "Gregory", 1000 },
{ "Obvious", "Artificial", 2000 },
{ "Fake", "Name", 1000 },
{ "Alan", "Turing", 2000 },
{ "Grace", "Hopper", 2000 },
{ "Anita", "Borg", 2000 }
};

auto v3 = staff;
sort(begin(v3), end(v3));

string searchName = "Hopper";
auto result = find(begin(staff), end(staff), [searchName](Employee e)->bool {return e.firstname == searchName; });

return 0;
}


//EMPLOYEE CLASS (in Employee.h)
#pragma once
#include <string>

class Employee
{
public:
Employee(std::string first, std::string last, int sal) :
firstname(first), lastname(last), salary(sal) {}

int getSalary() { return salary; }
std::string getSortingName() { return lastname + ", " + firstname; }

std::string firstname;
std::string lastname;
int salary;

bool operator < (const Employee& other)
{
if (lastname < other.lastname)
return true;
else
return false;
}

bool operator == (Employee other)
{
if (lastname == other.lastname &&
firstname == other.firstname &&
salary == other.salary)
{
return true;
}
else
{
return false;
}
}
};

编译时出现如下错误代码:

错误 C2678 二进制“==”:未找到接受类型为“Employee”的左侧操作数的运算符(或没有可接受的转换)

studio\2017\community\vc\tools\msvc\14.16.27023\include\xutility 3520

似乎无论我做什么,我都会遇到同样的错误。我能够打败它的唯一方法是注释掉失败的行...以“auto result = find ...”开头

最佳答案

我认为您使用了错误的功能。根据this , find 有一个常量值作为第三个参数,而 find_if 有一个 UnaryPredicate,这是你想要实现的。

find_if 改变,它会编译。

关于c++ - 如何将 Lambda 表达式与自定义类对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497518/

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