我正在寻找一种有效的方法来获得两个std::vectors
之间的差异。它们包含的对象没有任何自然顺序;我能做的最好的就是测试平等。这似乎排除了std::set_difference
选项。
有没有比比较两个嵌套迭代器中的对象更好的解决方案?
答案 0 :(得分:0)
目标是通过将可能的正匹配组合在一起来减少相等测试的数量。
我能想到的最好的方法是使用第一个向量构建一个hashmap,然后从hashmap中减去第二个向量的所有元素。这意味着你需要为你的元素提供一个不错的哈希函数。
平凡地说,如果你存储指针,并且你的等式谓词是基于它的,你也可以将你的哈希基于该指针的整数值。
请参阅What is a good hash function?。
正如评论中所提到的,另一种可能性是对元素的某些属性建立排序,并使用它来减少平等的可能性。您可能必须先对两个向量进行排序。
答案 1 :(得分:0)
你可以利用向量的属性,它们具有连续的内存分配,这意味着,向量有一个大的内存空间保留(通常大于使用),没有花哨的优化,你可以直接比较内存空间。
在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;
}