如何比较C++中不同大小的向量
How to compare vectors of different sizes in C++
我有两个向量,一个包含有关系列的信息(ID,名称,流派和季节数量(,另一个包含不同系列的剧集(ID,IDofEpisode,名称,持续时间,评级,季节(。第一个向量仅包含大约 4 个系列(其所有信息都在向量内(,第二个向量包含所有 4 个系列的 50 多集(其所有信息也在向量内(。如果两个向量的 ID 放在一起,则它们的 ID 具有相同的数字,例如:
series(20110125, "Game of Thrones", "Drama", 8);
series(20170120, "Dark", "Mystery" ,2);
episodes(20110125, "20110125-S01E01", "Winter is coming", "1:02", 9.1 ,1);
episodes(20170120, "20170120-S02E01", "Beginnings and Endings", "0:53", 8.9, 2);
等等
我需要做的是能够通过它们的 ID 号比较两个向量,我的问题是考虑到大小差异,我不确定该怎么做。如果有任何帮助,这些向量来自不同的类别(系列和剧集(。
如何比较C++中不同大小的向量
我猜你想具体比较同一类型std::vector
的两个实例。因此,对于一些定义良好且有序的抽象数据类型τ,两个std::vector< >
(它应该是LessThanComparable(。
将std::vector<int>
与std::vector<std::string>
进行比较没有普遍意义(您需要在纸上指定您想要的内容(。
您首先需要在纸上指定您的比较操作。它应该定义一些偏序吗?也许你想要一些字典顺序,并且你的向量分量的类型是可比的?
在这种情况下,请考虑使用std::lexicographical_compare
有关C++的更多信息,请参阅此处。也许阅读 C++11 标准 n3337。
另一种方法是确保某些超类的每个实例都有一个唯一的标识符(例如序列号 - 或它们的 std::tuple,或者您的类具有实现顺序的operator <
- 可能存储在某个数据库中(,然后您将通过对象的唯一 id 比较对象。
您还可以通过地址比较某些class
-es 的实例(例如使用std::addressof
(。但是,由于ASLR,程序在许多操作系统上的行为变得不可重现(严格意义上,这样做可能是未定义的行为;在大多数情况下,它在实践中确实有效(。
也许更好或更合适的容器可以满足您的需求。如果您经常比较已知是完全有序的数千个整数的许多不同序列,则可以考虑用某种std::set<int>
来表示每个这样的升序序列,并且比较这样的 std::set-s 可能会更便宜。扬子晚报.
您绝对应该考虑编写自己的GCC插件,以在编译时优化比较和/或使用元编程技术生成比较它们的C++代码。因此,像SWIG一样生成无聊的C++代码。然后阅读J.Pitrat的书《人造生物:有意识的机器的良心》ISBN 978-1848211018
由于您将仅通过其ID来比较两个集合,因此大小差异应该不是问题。您可以只访问将成为 ID 的第一个元素,并基于此比较两个集合。
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么