C++ 整数集之间的映射
我需要把一组整数映射成一组整数 首先,我想指出,并不是所有可能的整数集都被考虑在内。 相反,我创建应用程序将(永远)使用的相关集—以编程方式,仅一次,并将其序列化到二进制文件中 接下来,我将构造一个C++ 整数集之间的映射,c++,algorithm,qt,C++,Algorithm,Qt,我需要把一组整数映射成一组整数 首先,我想指出,并不是所有可能的整数集都被考虑在内。 相反,我创建应用程序将(永远)使用的相关集—以编程方式,仅一次,并将其序列化到二进制文件中 接下来,我将构造一个QMap setMap 稍后,应用程序(通过用户输入)构造另一组整数,将其称为userSet,并快速获取setMap[userSet] 现在,问题是,QMapneedsoperator我会将集合转换为有序列表并映射这些集合(然后再转换回集合)。为有序列表定义比较运算符比为集合定义比较运算符更容易。当然
QMap setMap
稍后,应用程序(通过用户输入)构造另一组整数,将其称为userSet
,并快速获取setMap[userSet]
现在,问题是,
QMap
needsoperator我会将集合转换为有序列表并映射这些集合(然后再转换回集合)。为有序列表定义比较运算符比为集合定义比较运算符更容易。当然,这对你来说可能太慢了
您还可以使用哈希映射。您需要提供自己的重载操作符。您可以参考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或类似的东西中是否存在所需的映射值。尝试了这个方法,它可以工作,但速度非常慢。无论如何,这是个有用的主意!谢谢