C++ 如何在向量结构中搜索项?

C++ 如何在向量结构中搜索项?,c++,vector,C++,Vector,我正在尝试创建一个函数,该函数将在我的结构中查找使用向量的项,但我不断收到错误: “operator==”不匹配(操作数类型为“video\u games”和“const std::basic\u string”) void DataStoreVectors::findItem(矢量和视频游戏){ 电子游戏; cout>videoGames.game\u name; 向量::迭代器; 它=查找(Video\u Games.begin()、Video\u Games.end()、videoGame

我正在尝试创建一个函数,该函数将在我的结构中查找使用向量的项,但我不断收到错误:

“operator==”不匹配(操作数类型为“video\u games”和“const std::basic\u string”)

void DataStoreVectors::findItem(矢量和视频游戏){
电子游戏;
cout>videoGames.game\u name;
向量::迭代器;
它=查找(Video\u Games.begin()、Video\u Games.end()、videoGames.Games\u name);
if(it!=Video_Games.end())

不能用视频游戏替换find参数中的videoGames.game\u name。它将编译。如果您的结构video\u games具有运算符==它将工作,如果game\u name属性相等,则返回true。

展开我的评论:

std::find
需要知道何时找到匹配项。如果您提供的是某个对象,它将尝试使用
=
将该对象与集合中的每个项目进行比较

视频游戏不是字符串,比较它们毫无意义。因此,一些评论中建议的重载运算符==不是一个好的设计

考虑这一备选方案:

auto it = std::find(
    Video_Games.begin(), Video_Games.end(),
    [&](const auto & game) { return game.game_name == videoGames.game_name; }
);
if(it != Video_Games.end())
    std::cout << "Found: " <<it->game_name <<std::endl;
else
    std::cout << "Not Found." <<std::endl;
auto it=std::find(
视频游戏。开始(),视频游戏。结束(),
[&](const auto&game){return game.game_name==videoGames.game_name;}
);
if(it!=Video_Games.end())

std::cout您不需要将视频游戏的名称存储在
video\u games
对象中,只需将其存储在字符串
video\u games\u name
中即可

然后,在c++20中,您可以这样实现它:

auto it = std::ranges::find(Video_Games, video_game_name, 
                            &video_games::game_name);

编译器不知道如何比较视频游戏和std::string。您需要实现运算符==来比较它们,或者在std::find调用中提供一个比较函数。谢谢您的回答,我有几个问题。1.“const auto”是否创建了另一个对象,这样一个对象就不会像我以前做的那样与自身进行比较?2。重载运算符==?是您在返回中使用的吗?如果是,我对您的意思感到困惑。如果您有其他问题,请打开其他问题:)
auto it = std::ranges::find(Video_Games, video_game_name, 
                            &video_games::game_name);