我无法访问BOOST或STL我的struct和map看起来类似于以下的psuedo:
struct s_map_key{
int a;
int b;
bool operator<(const s_map_key& smk) const
{
if (a < smk.a)
{
return true;
} else if (a == smk.a)
{
if (b < smk.b)
{
return true;
}
else if (b == smk.b)
{
return true;
}
}
return false;
}
};
int main(int argc, char* argv[])
{
std::multimap<s_map_key, std::string> myMap;
for(int i = 0; i <10; i++)
{
s_map_key smk;
smk.a = i;
smk.b = 2;
myMap.insert(std::make_pair(smk, "test"));
}
s_map_key smk;
smk.a = 3;
std::multimap<s_map_key, std::string>::iterator x = myMap.find(smk);
if(x != myMap.end())
{
std::cout << x->first.a <<std::endl;
std::cout << x->first.b <<std::endl;
}
return 0;
}
我要做的是搜索我的多图,查找A = 2,B = 2或A&amp; A的所有情况。 B = 2.我不确定但是,我认为我需要在我的结构中创建谓词来“查找”。想法?
答案 0 :(得分:4)
operator<
就是find
或其他任何内容所需的全部内容。但是,您的实现有一个错误。如果操作数相等,则返回true
。
find
和其他标准库组件使用a == b iff ! (a < b) && ! (b < a)
的假设,因此,如果a
和b
相等,则<
必须为false
让find
工作。
else if (b == smk.b)
{
return false; // was true
}
答案 1 :(得分:0)
除非你想建立等于2 == smk if(smk.a == 2 || smk.b == 2 || smk.a&amp; smk.b == 2),我建议你做谓词外部和使用std :: find_if。如果你使它成为结构的一部分,以便你可以使用multimap的内部查找功能,你可以打开另一个编码器以不希望的方式使用谓词的大门。此外,内部查找函数将仅返回匹配的第一个实例,而使用std :: find_if,您可以更新起始点,以便您可以查找所有实例。如果要使用内部函数,则需要使用equal_range。