[英]Difference between two std::vectors with no natural sorting order
我正在尋找一種有效的方法來獲取兩個std::vectors
之間的差異。 它們包含的對象沒有任何自然順序; 我能做的最好的就是測試是否平等。 這似乎排除了std::set_difference
選項。
有沒有比比較兩個嵌套迭代器中的對象更好的解決方案了?
目標是通過將可能的肯定匹配分組在一起來減少相等性測試的次數。
我能想到的最好的辦法是用第一個向量構建一個哈希圖,然后從哈希圖中減去第二個向量的所有元素。 這意味着您需要為您的元素提供一個不錯的哈希函數。
通常,如果要存儲指針,並且相等謂詞基於該指針,則還可以基於該指針整數值來實現哈希。
請參閱什么是好的哈希函數? 。
如評論中所述,另一種可能性是對元素的某些屬性建立排序,並使用它來減少相等的可能性。 您可能必須先對兩個向量進行排序。
您可以利用vector的屬性,它們具有連續的內存分配,這意味着vector保留了一個大的內存空間(通常使用更大的內存,然后再使用),並且無需花哨的優化,就可以直接比較內存空間。
在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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.