比较同一结构的两个不同大小的向量
Compare two different size vectors of the same struct
我正在开发一个超小型的包管理器,用于自定义目的,带有一个简单的依赖项检查器,为此我需要比较两个向量(但数据类型相同,结构)第一个向量具有用户安装的包(使用简单的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
现在是installed_pacakges
和required_packages
中都存在的一组PackageInfo
。 然后,您可以验证所有必要的required_packages
是否可用。
你可以
使用 cpplinq。当然,从单个操作中使用它没有意义,但是如果您可以将它用于更多事情,则将cpplinq.h标头添加到您的项目中,这是您如何做到的
std::vector<PackageInfo> installed_packages;
std::vector<PackageInfo> required_packages;
auto diff = from(installed_packages)
>> except(from(required_packages))
>> to_vector();
相关文章:
- 在C++中查找两个向量之间最相似的值
- 如何在C++中从两个向量生成所有可能的对?
- 返回两个向量 – 使用引用还是元组?
- 检查两个向量是否并行的最有效方法
- 如何获得比较两个向量对的子集
- 如何在 c++ 中对两个向量进行线性搜索?
- 如何在 c++ 中从两个向量创建 JSON 对象?
- C++如何同时删除位于两个向量中的 2 个指针?
- 如何通过 stl 容器和算法库计算两个向量的内积?
- 删除两个向量中的重复项
- 两个向量在犰狳中相等?
- 为什么我无法比较自定义类类型的两个向量?
- 通过块比较两个向量时,如何避免重复
- Boost.Test - 如何在交叉点上检查两个向量
- 通过移动从两个向量创建元组向量
- 如何在C 中合并两个向量
- R- armadillo c :用其他两个向量对向量进行排序
- 使用嵌套循环搜索两个向量并查看其属性
- 如何以精度换取速度来评估C++中两个向量的点积符号?(不特定于硬件)
- 我该如何XOR这两个向量的内容