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...