有人可以帮我解释这段代码吗?

时间:2014-04-28 11:44:08

标签: c++ iterator compare

我试图理解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;
    }
}

3 个答案:

答案 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填充。