我试图理解iteraror比较的内容?:在下面的代码中。有人可以解释一下吗? 提前致谢
map<string,CvSVM>& classes_classifiers = predictor.getClassesClassifiers();
map<string,map<string,int> > confusion_matrix;
for (map<string,CvSVM>::iterator it = classes_classifiers.begin(); it != classes_classifiers.end(); ++it) {
for (map<string,CvSVM>::iterator it1 = classes_classifiers.begin(); it1 != classes_classifiers.end(); ++it1) {
string class1 = ((*it).first.compare("Foods")==0) ? "People" : (*it).first;
string class2 = ((*it1).first.compare("Foods")==0) ? "People" :(*it1).first;
confusion_matrix[class1][class2] = 0;
}
}
答案 0 :(得分:0)
它可以用一种不那么混淆的方式写成
it->first == "Foods" ? "People" : it->first;
因为string::compare
如果字符串比较等于参数,则返回零。
it->first
是迭代器引用的键值对的键。因此,这会给出密钥,但如果是"People"
,则更改为"Foods"
。
答案 1 :(得分:0)
它只是std::string::compare
在三元运算符中使用。
compare()
才会返回0
。否则,它会根据相对的词典排序返回正数或负数。
使用a.compare(b) == 0
相当于a == b
,但在这种情况下可能稍快一些,因为b
是字符串文字,使用==
会先将其转换为std::string
,而compare()
可以直接解释。
对于三元运算符,它做了它一直做的事情:
x = a ? b : c;
具有与此相同的功能:
if (a) x = b;
else x =c;
除了它是表达而不是声明。这意味着它可用于初始化变量,如代码中那样。
长话短说,如果迭代器指向键"Foods"
,则字符串将设置为"People"
,否则将设置为迭代器指向的键。
答案 2 :(得分:0)
一个在另一个内部有两个迭代器;它和内在的它1。在循环内部(在每次迭代中),class1和class2根据给定的条件获得一些值(如果元素是&#34; Food&#34; class1得到&#34; People&#34;,否则得到元素的值)。然后,confusion_matrix的相应元素用0填充。