【发布时间】:2016-10-20 15:24:18
【问题描述】:
我想从地图中找到第一个非零元素,因此我执行了以下代码:
#include <map>
#include <iostream>
#include <algorithm>
bool nonzero(std::map<char,int>::const_iterator& it);
int main() {
std::map<char, int> m;
m['a'] = 0;
m['b'] = 1;
std::map<char,int>::iterator it = std::find_if(m.begin(), m.end(), nonzero);
std::cout << it->first << '\t' << it->second << std::endl;
return 0;
}
bool nonzero(std::map<char,int>::const_iterator& it) {
return it->second;
}
g++给出的错误很复杂,说是:
/usr/include/c++/5/bits/predefined_ops.h:234:30: error: invalid initialization of reference of type ‘std::_Rb_tree_const_iterator<std::pair<const char, int> >&’ from expression of type ‘std::pair<const char, int>’
{ return bool(_M_pred(*__it)); }
我不明白它在说什么以及为什么我的程序会失败。
【问题讨论】:
-
find_if将*i传递给您的函数,而不是i。 -
仔细检查谓词要求here
-
查找任何个使用
std::find_if的例子。
标签: c++ dictionary stl find stl-algorithm