【发布时间】:2017-10-01 18:42:57
【问题描述】:
我正在努力学习 Qt。我遇到了一些问题,但通常我通过谷歌搜索找到解决方案。但是今天下午我遇到了 QMap 的问题,我不明白这个问题。
我创建了一个类 File 并覆盖了 operator<,以便能够将其用作 QMap<File, bool> 中的键。问题是,当我尝试通过插入条目来初始化QMap 时,文件映射不包含operator< 实现意义上的重复条目。
bool File::operator<(const File &file) const{
if(comparator == NAME){
if(this->getFileName() != file.getFileName()){
return this->getFileName() < file.getFileName();
}
return false;
}
return this->getFileHash() < file.getFileHash();
}
QMap初始化:
for(File file: files){
//filesCheckStatus edclared in the header file QMap<File, bool> filesCheckStatus;
filesCheckStatus.insert(file, false);
}
在此示例中,当使用比较器 NAME 时,仅插入一次具有相同名称 (QString) 的条目。
如果我在所有情况下都返回 false,则最终映射仅包含一个条目(插入的第一个条目)。
有人能解释一下这种行为吗?
【问题讨论】:
-
这就是地图和集合的工作方式——一个键只能出现一次。
-
试试
QMultiMap -
File 是键而不是文件名,它是 File 的一个字段,并且 == 不用于确保使用唯一键(如 java 中的 equals)。