1> 先sort,然後才可能做unique;
2> unique完了之後,iterator指向最後乙個元素之後,於是erase從此處至end()即可。
這裡比較神奇的是sort和unique可以直接比較2個一維 vector的大小。
具體**如下:
#include
#include
#include
using
namespace std;
void
print_vec2
(vectorint>>
& vec)
}int
main()
,,,,
,,,}
;// remove redundancy
sort
(vv.
begin()
, vv.
end())
; vv.
erase
(unique
(vv.
begin()
, vv.
end())
, vv.
end())
;print_vec2
(vv)
;return0;
}
輸出為:
1 1 2 3
1 2 1 3
2 1 1 3
3 1 1 2
那麼,三重vector還能去重嗎?
能。不過本文的方法是去掉二維vector的重複,即sort與unique還可以比較二重vector, 而二維vector內部的一維部分的重複卻不會被去掉。
(由此可見,sort與unique的cmp運算元似乎是直接操作最直接元素的(對於三維vector而言就是操作二維vector;對於二維vector而言,就是操作一維vector),由此猜測該cmp運算元做的就是記憶體的值大小比較。)
**如下:
#include
#include
#include
using
namespace std;
void
print_vec3
(vector< vector< vector<
int>
>
>
& vvv)
cout <<
"\n";}
cout <<
"---------\n";}
cout <<
"}\n";}
intmain()
,,,}
,,,,
},,,
,}};
print_vec3;
sort
(vvv.
begin()
, vvv.
end())
; vvv.
erase
(unique
(vvv.
begin()
, vvv.
end())
, vvv.
end())
;print_vec3
(vvv)
;return0;
}
輸出為:
總之,多重vector也可以做sort和unique有點意思。stl的泛型程式設計還是蠻強的。
(完)
多維陣列去重
假如有這樣乙個陣列,要求找出陣列兩兩之間name相同的元素,並標記其所在陣列的索引。var arr 開始想到的笨方法就是陣列兩兩遍歷,但當資料量大的時候,這種方法的效率是極其低的,於是思考,如何能在遍歷一次的情況下,實現這個功能。var obj arr.foreach arr1,index else...
vector去重方法
1.排序以後使用unique 函式 unique函式比較的時相鄰的兩個元素,重複的放到vector尾部 sort vector.begin vector.end vector.erase unique vector begin vector end vector end unique 函式將重複的元...
PHP多維陣列去重
最近用到了乙個獲取歷史會議列表的問題,需要去這個多維陣列去重後返回返回給客戶端,這裡使用了幾個php的組裝函式,分享下,示例 如下 str res json decode str,true echo num count res result print r res result echo rrr r...