2017-04-07 72 views
-1

我有一个STL集合类型:C++嵌套对性病的搜索对象::设为

std::set< std::pair< double, std::pair< unsigned, vector<unsigned> > > > X

我知道我可以让事情变得更简单,通过改变我的数据结构,但在这里,这不是一个选项为了我。

如何仅在我的集合中的内部对的第一个元素中搜索unsigned类型的元素?

我尝试了以下方法,但不起作用。

auto it = std::find_if(X.begin(), X.end(), [value_searching] 
(const std::pair<double, std::pair< unsigned, vector<unsigned> >& elem) { 
return elem->second.first == value_searching 
     }); 
+1

只有指针或迭代器应该是' - >'左边的。 'elem'既不是 - 它是一对''。 – aschepler

+0

这种情况下的替代方法是什么? @aschepler –

+0

这种复杂的结构在现实生活中从来没有任何意义......它使代码难以维护,因为您有多个第一和第二个......此外,它可能不如您想要的那样高效......您为什么如果您不使用密钥查找项目,请使用一套。 – Phil1970

回答

2

您需要使用.代替->,因为elem是一个参考,而不是一个指针,为pair

auto it = std::find_if(X.begin(), X.end(), [value](auto& elem) { 
    return elem.second.first == value; 
}); 
+0

以这种方式我只能做(elem.second),但(elem.second.first)不起作用 –

+0

@FabiaBushraTamanna它以什么方式不起作用?适用于我。 –

+0

我的不好,我错过了我的设置声明中的'>'@joseph –