STL vector刪除重複元素

2021-06-18 08:16:33 字數 1861 閱讀 6633

stl提供了很多實用的演算法,這裡主要講解sort和unique演算法。

刪除重複元素,首先將vector排序。

sort( vecsrc.begin(), vecsrc.end() );

然後使用unique演算法。

vecsrc.erase( unique( vecsrc.begin(), vecsrc.end() ), vecsrc.end() );

unique返回值是重複元素的開始位置。

如果vector中儲存的元素是自定義的結構或者是類,那麼就需要過載操作符。

根據類的某乙個成員變數排序或者比較。

sort演算法需要過載"<"操作符。

unique演算法需要過載"=="操作符。

操作符過載的示例如下:

class ctest

public:

bool operator<( const ctest& ocompany ) const

bool operator==( const cecompany& ocompany ) const

分享到:

原題為某著名軟體公司的試題,大意如下:給定乙個vector容器,要求刪除容器中重複的元素,並保持剩餘元素的順序不變。在這裡,本文為了全面通用考慮,作了擴充套件,刪除vector中的重複元素,從容器中元素順序上可分為2種情形:1)保持剩餘元素順序不變,特稱為穩定刪除,對應下面的stable_unique版本函式模板 2)不考慮順序變化,特稱為快速刪除。對應下面的quick_unique版本函式模板。從重複的概念定義也可分為2種情況:1)基於簡單的相等判斷 2)基於謂詞的等價判斷。因此,由排列組合得知應該有4種版本的實現,下面給出**描述

1//函式物件模板類

2template

3struct predicate48

9    predicate(const t& t)

10        :_t(t)

11   

13    bool operator()(const t& t) const

14   

18    //支援std::unique謂詞版本的刪除

19    bool operator()(const t& l,const t& r) const

20   

24    t _t;

25};

2627//quick_unique版本1: 相等判斷

28template

29void quick_unique(std::vector& con)

3034

35//quick_unique版本2: 謂詞判斷

36templateclass predicate>

37void quick_unique(std::vector& con)

3842

43//stable_unique版本1: 相等判斷

44template

45void stable_unique(std::vector& con)

4656}

5758//stable_unique版本2: 謂詞判斷

59templateclass predicate>

60void stable_unique(std::vector& con)

6171}

以上**在vc2005環境下編譯測試通過,再做進一步擴充套件,問題完全可以歸類為刪除某容器內重複元素,只要再加乙個模板的模板引數即可template class conn;函式的形參型別變為std::conn就行了,但要注意的是不同平台下對應容器的erase實現所返回的迭代器可能有所差別,比如map需要這樣寫才能在linux上正確工作:conn.erase(it++),對於特殊的情況,可以對以上4個函式作對應的過載(注意,函式模板沒有特化的概念)來解決。

STL vector刪除重複元素

stl提供了很多實用的演算法,這裡主要講解sort和unique演算法。刪除重複元素,首先將vector排序。sort vecsrc.begin vecsrc.end 然後使用unique演算法。vecsrc.erase unique vecsrc.begin vecsrc.end vecsrc.e...

STL vector刪除重複元素

stl提供了很多實用的演算法,這裡主要講解sort和unique演算法。刪除重複元素,首先將vector排序。sort vecsrc.begin vecsrc.end 然後使用unique演算法。vecsrc.erase unique vecsrc.begin vecsrc.end vecsrc.e...

鍊錶刪除重複元素1,刪除重複元素2,

刪除排序鍊錶中的重複元素 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1 輸入 1 1 2 輸出 1 2 示例 2 輸入 1 1 2 3 3 輸出 1 2 3 思路 很簡單。先將兩個指標進行操作,start,end然後判斷end是否等於空即可 definition for s...