在QMap或QHash中进行QSet

Mhd*_*ori 3 c++ comparison qt qt4 qmap

我有QMap ,我想做出QSet关键,我无法做到这一点,因为QSet无法比较.例如:

QSet<int> intSet;
QMap<QSet<int>, char> charSet;

intSet.insert(1);
intSet.insert(2);
intSet.insert(3);

charSet.insert(intSet, '6');
Run Code Online (Sandbox Code Playgroud)

有没有办法使它工作?如果我继承QSet并定义operator <我应该如何实现它?即:比较的逻辑应该是什么?

注意:我太在乎性能了

And*_*oss 5

你似乎知道如何使它工作:定义一个operator<(const QSet<int>&)函数(我不相信Qt要求你继承QSet使这个工作,我知道STL没有).

显然,在无序集上实现比较器将很困难.我认为,这样做是为了让它在恒定的时间内运行是不可能的.您可以尝试先检查大小,然后将这两个内容作为列表进行排序和比较.

但广泛地说:不要这样做.这是一种虐待.当然,您可以使用某些东西来设置不是可变数据结构的密钥.集合中的整数空间是固定的还是小的(即总是在0-1024或其他范围内)?然后尝试存储在QByteArray中的位掩码.等等...