C++ 有人能给我解释一下这个代码吗?

C++ 有人能给我解释一下这个代码吗?,c++,iterator,compare,C++,Iterator,Compare,我正在试图理解iteraror compare?是什么:在下面的代码中。有人能解释一下吗? 提前谢谢 map<string,CvSVM>& classes_classifiers = predictor.getClassesClassifiers(); map<string,map<string,int> > confusion_matrix; for (map<string,CvSVM>::iterator it = classes_cl

我正在试图理解iteraror compare?是什么:在下面的代码中。有人能解释一下吗? 提前谢谢

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;
    }
}

它可以用一种不那么模糊的方式写成

it->first == "Foods" ? "People" : it->first;
因为字符串::如果字符串与参数进行比较,则比较返回零

它->第一个是迭代器引用的键值对中的键。因此,这给出了键,但如果是食物,则改为“人”。

它只是在三元运算符中使用

当且仅当两个字符串相同时,compare返回0。否则,它将根据它们的相对词典顺序返回一个正数或负数

使用a.compareb==0相当于a==b,但在本例中速度可能稍快一些,因为b是字符串文字,使用==将首先将其转换为std::string,而compare可以直接解释它

至于三元运算符,它做了它一直做的事情:

x = a ? b : c;
具有与此相同的功能:

if (a) x = b;
else x =c;
除了它是一个表达式而不是一个语句。这意味着它可以用于初始化变量,就像在代码中一样


长话短说,如果迭代器指向一个键,字符串将被设置为People,否则它将被设置为迭代器指向的键。

有两个迭代器,一个在另一个里面;它和内部的一个it1。在每次迭代的循环中,如果元素是食物,则class1和class2根据给定的条件获得一些值;如果元素是人,则class1和class2获得元素的值。然后,矩阵对应的元素用0填充。

这只是前进。不高级。谢谢你的详细解释……是的,我要找的词是……十进制运算符