C 刪除陣列中重複元素的演算法(map)

2021-12-29 21:27:32 字數 2358 閱讀 8762

c++ 刪除陣列中重複元素的演算法(map)

<1、陣列去

一.問題描述

在實際程式設計中我們經常遇到「去掉重複數字」等類似的問題,也就是「remove the duplicate」問題。例如在「建立某個統計樣本時,要去掉重複的元素」。下面將給出這類問題的解決思路。

二.解決思路

解決上述問題基本上有三種思路:

第一種:使用map容器過濾掉重複元素(適用於整形資料、字串等);

第二種:利用陣列進行去重,首先對該組資料進行排序,然後從頭遍歷陣列,判斷當前位置的資料和下乙個位置的資料是否重複,若不重複,新增下一位中的資料到過濾後的陣列中,並把比較的基準資料設定為剛加入的這個資料,然後繼續進行比較。若重複,則跳過該資料去比較後面的(也可以做字串的比較),需要使用兩個指標(乙個基準指標,乙個游標指標);

第三種:是對第二種方法的改進,第二種方法需要開闢新的空間儲存過濾後的元素,此方法中不需要開闢空間,只需用陣列中沒有重複的元素把重複的元素覆蓋,過程如下:

0 1

2 3

4 5

6 1

1 23 3

3 4(1)基準指標首先指向陣列第0個位置,游標指標指向第1個位置,比較兩指標所指向的資料是否相等,若相等,游標指標向後移一位,基準指標不動,再次比較;若不相等,游標指標所指向的資料複製到基準指標的下一位,基準指標和游標指標各自從當前位置向後移一位,再次比較;

(2)終止條件:游標指標超過陣列的最後一位;

(3)當前基準指標之前的一段陣列則為去重後的陣列(包括基準指標所指向的元素);

三.**實現

1.map容器去重實現**

#include

#include

void inserttomap(int *a, int n,std::map &outmap);

void sprintmap(std::map &coutmap);

void main()

; std::map resultmap;

inserttomap(a, 10, resultmap);

sprintmap(resultmap);

system("pause");

} void inserttomap(int *a, int n, std::map &outmap)

);

if (!ret.second)

} outmap = testmap;

} void sprintmap(std::map &coutmap)

; std::sort(&a[0], &a[9]+1);//陣列排序

int scount;//過濾後陣列的有效位長度

removemultip(a, 10, scount);

for (int i = 0; i <= scount; i++)

system("pause");

} void removemultip(int *a, int n,int &cout)

++it;

} 注意

1、while中迭代器的終止條件it != shotlist.end()

2、必須為++it,it++會報錯。

<3.實

一.例項1——map+雙重for迴圈格式

#include

#include

using namespace std;

int main()

; int j=0;

map n;

pair::iterator,bool> ret;

for(int i =0;i<10;i++)

for(int i=0;i二.例項2——set格式

#include

#include

using std::cout;

using std::endl;

using std::set;

int main(int argc, char* ar**)

; set is(ia,ia+10);

for (set::const_iterator c_i=is.begin();c_i!=is.end();++c_i)

cout<

刪除陣列重複元素

問題描述 已有一維陣列,儲存不超過100個整型資料,其中有些元素的值存在重複,從陣列中刪除所有重複的元素 每個元素只保留乙個 並輸出結果陣列。輸入說明 使用者可輸入多組資料,每組資料由兩行組成 第一行 陣列元素的個數n 第二行 n個陣列元素,由空格分隔 輸出說明 對於每組輸入,輸出最後的結果,整數之...

Perl 刪除陣列中重複元素

寫乙個小程式時候,需要去除乙個陣列中的重複元素,搜尋了一下,找到的 主要是兩種,一種是使用grep函式,一種是轉換為hash表,分別如下 使用grep函式 片段 my array a b c a d 1,2,5,1,5 my count my uniq times grep 2 array 使用轉換...

php array flip 刪除陣列重複元素

在 中,用於刪除陣列中重複元素有乙個可用的函式,那就是 array unique 但是它並不是乙個最高效的方法,使用array flip 函式將比array uniqure 在速度上高出五倍左右。方法如下 arr array 假設有一萬個元素的陣列,裡面有重複的元素。arr array flip a...