我有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中的位掩码。等等...