我有QMap,但我想将QSet作为它的键,但我无法这样做,因为QSet不具有可比性。
例如:

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

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

charSet.insert(intSet, '6');

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

注意:我太在乎效能

最佳答案

您似乎知道如何使它起作用:定义一个operator<(const QSet<int>&)函数(我不相信Qt要求您将QSet子类化才能使它起作用,但我知道STL不需要)。

显然,在无序集合上实现比较器将很困难。我认为,要使其以恒定的时间运行是不可能的。您可以尝试先检查大小,然后再将两个内容排序并比较为列表。

但总的来说:不要这样做。这是一种虐待。当然,您可以将集合键的某些内容用于可变数据结构。集合中的整数空间是否固定且较小(即始终在0-1024或其他范围内)?然后尝试存储在QByteArray中的位掩码。等等...

10-06 01:54