没有自然排序顺序的两个std::向量之间的差
Difference between two std::vectors with no natural sorting order
我正在寻找一种有效的方法来获得两个std::vectors
之间的差异。它们所包含的对象没有任何自然的顺序;我最多能做的就是测试是否平等。这似乎排除了std::set_difference
选项。
有比比较两个嵌套迭代器中的对象更好的解决方案吗?
目标是通过将可能的正匹配分组在一起来减少相等检验的数量。
我能想到的最好的方法是用第一个向量构建一个哈希映射,然后从哈希映射中减去第二个向量的所有元素。这意味着你需要为你的元素想出一个像样的哈希函数。
很简单,如果你存储的是指针,并且你的相等谓词是基于它的,你也可以基于指针整型值的哈希。
参见什么是好的哈希函数。
正如在注释中提到的,另一种可能性是在元素的某些属性上建立排序,并使用它来减少相等的可能性。您可能必须先对两个向量进行排序。
你可以利用向量的一个属性,它们有连续的内存分配,这意味着,向量有一个大的内存空间保留(大于使用,通常),没有花哨的优化,你可以直接比较内存空间。
在c++ 0x中,你有data()方法,它让你直接访问内存空间的开始。您可以使用memcmp来比较向量内的所有数据。
std::vector<char> vector_1;
std::vector<char> vector_2;
// data in to vector_1
// data in to vector_2
if(!memcmp(vector1.data(),vector_2.data(),SIZE_OF_BUFFER_TO_COMPARE))
{
std::cout <<< "equal vectors" << std::endl;
}
相关文章:
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 比较两个 std::chrono::time_point 实例时出错
- 如何获取两个 std::map 的公钥?
- 当两个 std::map 对象相同时
- 比较两个std::矢量/阵列,或者通常比较两个stl连续器
- 使用 C++11 在一行中连接两个 std::vector
- C 是否具有对两个STD :: sets,vectors等进行三角比较的标准方法
- 优化两个 std::vector<std::complex> 的元素乘积,使用 <float>fftw_malloc() 分配
- 操作员=在两个std :: chrono :: time_point引起错误之间
- C++:快速/并行计算两个"std::vector<double>"向量之间的L1距离
- C++:带有"std::lock_guard"的互斥锁是否足以同步两个"std::thre
- 如何获得两个 std::unordered_map 的集合交集?
- 比较两个std ::弦,以查看它们是否匹配C
- 在两个std::向量之间匹配元素
- 两个std :: unique_lock在同一静音上使用会导致死锁
- 如何将两个std :: vector结合到一个std :: vector与std :: pair
- 交换两个 std::array<T、100> 对象的成本是多少?
- 将对象传递到两个std ::线程
- 检查两个std ::函数是否相等
- 像strcmp那样比较两个std::string