C ++ STD :: find_if使用结构谓词
||
key_struct kStruct;
kStruct.x = 2;
std::find_if(m_cueCommands.begin(), m_cueCommands.end(), find_MyInt(kStruct));
struct key_struct
{
int x;
string y;
string z;
}
struct find_myInt : std::unary_function<key_struct, bool>
{
int x;
find_myInt(key_struct kStruct):myInt(kStruct.x){}
bool operator()(key_struct const& m) const
{
return m.x == myInt;
}
};
我敢肯定,我有点搞砸了,但是,我认为这是适度的。我要执行的操作是在地图中将key_struct作为键。我希望能够搜索键并返回设置key_struct所用的信息。如果我将key_struct设置为x = 2,那么我只想返回int x等于2的地方。如果我将x = 2设置为y = \“ testString \”,那么我只想返回值的子集其中x = 2,y = \“ testString \”。
我相信我的方法很接近,但是我想我缺少一些东西。有想法吗?
没有找到相关结果
已邀请:
3 个回复
壤欠攻混
的成员,因此应该是:
。但这没关系,无论如何都需要更改它。 这是我会尝试的。这未经测试,可能包含错误,并且布尔返回值的“计算”效率极低。无论如何... 要使用它,请创建一个要与之匹配的结构,如从代码中可以看到的,只有在try3ѭ时,它才会尝试匹配。因此,如果将\“ search \”结构设置为
,它将匹配every5ѭ的每个键(y&z可以是任意值)。
[编辑]注意您要使用地图,因此我相应地更新了代码。仍然未经测试,请随时指出错误。 [编辑2]如果您实际上在创建地图时遇到问题,因为在key_struct上没有严格的弱排序,则应该这样做。 再次,未经测试,可能包含错误。对于所有
来说,效率也相当低下,但是,好吧……随时随便用您最喜欢的Karnaugh地图求解器将它们排除掉(想到的是BMin)。
芳菱挨啡
舞备联
。如您所说,如果您尝试将struct用作映射键,则需要提供“严格弱排序”的比较。例如,使用\“ <\”代替\“ == \”。然后将该比较提供给地图。或在结构中重载
运算符。您可以使用
运算符或
的
方法进行O(log n)搜索,其中
是O(n)。