C++ 如何在向量结构中搜索项?
我正在尝试创建一个函数,该函数将在我的结构中查找使用向量的项,但我不断收到错误: “operator==”不匹配(操作数类型为“video\u games”和“const std::basic\u string”)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
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);