【发布时间】:2018-11-08 19:32:31
【问题描述】:
我是 C++ 和谓词的新手,但我遇到了问题。我正在尝试检查unordered_map 中的所有键是否存在于set 中,或者甚至是另一个映射中具有不同值类型的键。
本质上,[key in set_ for key in map_.keys()] 或 [key in map2_ for key in map1_.keys()] 在 python 中。
一种方法如下:
for( auto itr = map_.begin(); itr != map_.end(); ++itr ) {
if( set_.find( itr->first ) == set_.end() ) return false;
}
但我想使用std::all_of 或std::equal 来实现相同的目的。到目前为止,这是我所拥有的:
some_function() {
//set_ and map_ in scope
areEqual = std::equal( map_.begin(), map_.end(), set_,
[]( auto itr ){ return set_.find( itr->first ) != set_.end(); } );
}
编译器抱怨set_ 超出return set_.find(...)... 的范围
我也试过
class checker {
public:
bool operator()( map_itr itr )
{ return set_.find( itr->first ) != set_.end(); }
};
但遇到了同样的问题。
非常感谢任何帮助或指点 :)
【问题讨论】:
-
你必须捕获集:
[&set_](..){..}. -
@Jarod42 我不太习惯排序范围算法,在
std::unordered_map的情况下它真的可以工作吗? -
设置操作需要排序范围,因此与
unordered_*不兼容。