簡體   English   中英

將 2D 數組的每個元素與其余的 C++ 進行比較

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

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