Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 整数集之间的映射_C++_Algorithm_Qt - Fatal编程技术网

C++ 整数集之间的映射

C++ 整数集之间的映射,c++,algorithm,qt,C++,Algorithm,Qt,我需要把一组整数映射成一组整数 首先,我想指出,并不是所有可能的整数集都被考虑在内。 相反,我创建应用程序将(永远)使用的相关集—以编程方式,仅一次,并将其序列化到二进制文件中 接下来,我将构造一个QMap setMap 稍后,应用程序(通过用户输入)构造另一组整数,将其称为userSet,并快速获取setMap[userSet] 现在,问题是,QMapneedsoperator我会将集合转换为有序列表并映射这些集合(然后再转换回集合)。为有序列表定义比较运算符比为集合定义比较运算符更容易。当然

我需要把一组整数映射成一组整数

首先,我想指出,并不是所有可能的整数集都被考虑在内。 相反,我创建应用程序将(永远)使用的相关集—以编程方式,仅一次,并将其序列化到二进制文件中

接下来,我将构造一个
QMap setMap

稍后,应用程序(通过用户输入)构造另一组整数,将其称为
userSet
,并快速获取
setMap[userSet]


现在,问题是,
QMap
needs
operator我会将集合转换为有序列表并映射这些集合(然后再转换回集合)。为有序列表定义比较运算符比为集合定义比较运算符更容易。当然,这对你来说可能太慢了


您还可以使用哈希映射。

您需要提供自己的重载操作符。您可以参考QMap中的
Employee
类示例。在您的情况下,您需要提供如下功能:

 bool operator<(const QSet<int> &first, const QSet<int> &second)
 {
    // your logic to compare the two sets
 }

bool操作符您始终可以将地图的键设置为
QString
。对集合中的数字进行排序,以某种方式打印它们(使用任意分隔符),然后高兴起来。

如果集合是静态的,请将它们加载到一个表(
QVector
)中,并使用该表中集合的索引作为映射(
QMap
)中的键和值,而不是集合本身。

哈希映射也是我的想法。但是,qHash()不是为QSet实现的。您可以自己实现它。您有多少不同的集合?强力搜索是不可能的吗?我认为比较两个集合的逻辑是这里的问题。QSet使用基于哈希表的实现,与STL集合不同,STL集合使用平衡搜索树,并在STL集合上迭代以升序给出值。因此,如果使用STL集合,比较起来更容易。您只需切换到STL映射并设置。。。比较STL集更简单,因为STL集是一个已排序的容器。在STL集合上迭代将以升序返回项。但是我认为这在QSet中是不可能的。也许你可以这样做:对于set1中的每个项目,验证set2或类似的东西中是否存在所需的映射值。尝试了这个方法,它可以工作,但速度非常慢。无论如何,这是个有用的主意!谢谢