我正在开发一个用于自定义目的的超小型软件包管理器,它带有一个简单的依赖关系检查器,因为我需要比较两个向量(但数据类型相同,结构相同),第一个向量由用户安装了软件包(使用一个简单的SQLite查询),第二个向量是要安装的必需软件包。
结构代码如下:
typedef struct {
std::string UniformTypeID;
std::string PackageName;
unsigned int Version;
} PackageInfo;
我需要知道如何比较这两个向量,但这是一个问题,两个向量的大小可能会有所不同,例如,如果我使用已安装软件包的大小,则向量小于依赖项软件包(更大),找不到限制范围内的任何包裹,但请求的包裹超出了限制。
我可以使用C ++ 11。
为您的类提供严格的弱排序谓词PackageInfo
,无论是二进制谓词还是简单地提供operator<
。
这样,您可以对阵列进行排序(已安装的软件包和必需的软件包)。然后,您可以使用的设置操作功能STL
:
std::vector<PackageInfo> installed_packages = ...;
std::vector<PackageInfo> required_packages = ...;
std::vector<PackageInfo> met_requirements;
std::sort(installed_packages.begin(), installed_packages.end());
std::sort(required_packages.begin(), required_packages.end());
std::set_intersection(
installed_packages.begin(), installed_packages.end(),
required_packages.begin(), installed_packages.end(),
std::back_inserter(met_requirements));
met_requirements
现在是一组PackageInfo
存在于两个installed_pacakges
和required_packages
。然后,您可以验证所有必要条件required_packages
是否可用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句