![](/img/trans.png)
[英]How to compare an element of a 2D array with rest of the its elements?
[英]Compare each element of a 2D array with the rest C++
我是 C++ 新手,我要做的是編寫一個方法來檢查二維數組是否包含任何重復項。
例如,我有一個matrix[3][4]
,我已經能夠將第一個元素[0][0]
與其余元素進行比較,直到最后一個元素[2][3]
。 問題是我不知道如何繼續,我應該做的是該方法然后將元素[0][1]
與其余元素進行比較(當然除了前一個和它本身)等等。
首先,它是一個二維數組這一事實在這種情況下是無關緊要的; 你想在整個數組中找到重復項,所以無論如何你最好使用一維索引。 巧合的是,這是在 C++ 中處理二維數組的建議方法。
因此,假設您可以按某種順序放置索引,一般的想法是檢查每個元素與所有后續元素。 這會給你O(n 2 ) 。 不出所料,偽代碼是兩個循環,並且是用於碰撞檢測的常見模式:
for (iterA = 0; iterA < num - 1; iterA++) {
for (iterB = iterA + 1; iterB < num; iterB++) { // note how iterB starts one further
if (*iterA == *iterB)
return true; // found a duplicate
}
}
在二維數組的情況下, *iterA
解引用可以替換為一個函數,該函數將復合一維索引分解為兩個組件,例如i % width, i / width
。 這又是一個非常常見的模式。
說了這么多,何必呢? 創建一個std::set
,開始一個一個地放置元素並在每次插入之前調用find
。 如果find
返回某些內容,則中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.