簡體   English   中英

沒有自然排序順序的兩個std :: vector之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM