gpt4 book ai didi

c++ - 在 map 上使用 find_if 按值查找

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:03 39 4
gpt4 key购买 nike

我有一个有 map 的类(class)。我需要通过搜索特定值而不是键来在 map 中找到迭代器。使用成员函数谓词 IsValueFound,正在尝试这个。

class A
{
public:
void findVal();
private:
int state;
map<int, int> exmap;
bool IsValueFound(pair<int key, int val> itr)
{
return state == itr.second;
}
};

void A::findVal
{
itr = find_if(exmap.begin, exmap.end, mem_fun1_ref(&A::IsValueFound));
}

我遇到编译错误。我不确定这些函数适配器的语法是什么。请帮忙。

编辑:抱歉。请忽略 finf_if stmt 之外的编译错误。我需要先更正 find_if stmt。此外,代码没有提升 :(

最佳答案

将对象 A 转换为仿函数稍微容易一些:
但是您的代码还有其他问题(见下文):

#include <map>
#include <memory>
#include <functional>
#include <algorithm>

using namespace std;

class A {
public:
void findVal();
private:
int state;
map<int, int> exmap;

// Changed the function IsValueFound() to operator()
// This makes the whole object behave like a function.
// Its a lot easier then getting member functions and binding
// the this reference.
bool operator()(map<int,int>::value_type const& itr) const
// ^^^^^^^^^^^^^^^^^
// std::pair<int,int> is not the type held in the map
// so you are not going to bind against it using a pair.
{
return state == itr.second;
}
};

void A::findVal()
{
// You did not specify a type
// for the iterator in your code.
std::map<int,int>::iterator itr1 = find_if(exmap.begin(), exmap.end(), *this);
// ^^^^^^ ^^^^^^
// begin() and end() are methods.

// Just pass the `this` object as the the third parameter it will act as a function now.
}

关于c++ - 在 map 上使用 find_if 按值查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520236/

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