我需要将一组整数映射到整数集。
首先,我想指出并非所有可能的整数集都被考虑在内。 相反,我创建应用程序将(曾经)使用的相关集合 - 以编程方式,仅使用一次,并在二进制文件中将其序列化。
接下来,我构建一个QMap<QSet<int>, QSet<int> > setMap
。
稍后,应用程序构造另一组整数(通过用户输入),将其称为userSet
并快速获取setMap[userSet]
。
现在问题是,QMap
需要为关键字类型定义operator <
,显然QSet<int>
没有。{/ p>
我该怎么办?
答案 0 :(得分:1)
您需要提供自己的重载&lt;运营商。您可以参考QMap documentation中的Employee
类示例。在您的情况下,您需要提供如下函数:
bool operator<(const QSet<int> &first, const QSet<int> &second)
{
// your logic to compare the two sets
}
答案 1 :(得分:1)
您始终可以将地图的密钥设为QString
。订购集合中的数字,以某种方式打印它们(使用任意分隔符),并且开心。
答案 2 :(得分:1)
如果这些集是静态的,请将它们加载到表(QVector<QSet<int> >
)中,并使用该表中集的索引作为映射中的键和值(QMap<int,int>
)而不是集合自己。
答案 3 :(得分:0)
我将这些集转换为有序列表并映射它们(然后转换回集合)。为有序列表定义比较运算符比为集合更容易。当然,这对你来说可能太慢了。
您也可以使用哈希映射。