コンテナvector STLを使用して重量を除去(unique/set)

6195 ワード

第一の方法
std::unique
unique()関数は、シーケンスが整列していることを前提としてヘッダファイルに定義され、パラメータ範囲内の要素を移動して消去する重複要素を上書きすることで「重さ除去」を実現します.残りの要素の相対的な位置は変更されず、コンテナの物理的なサイズは変更されません.eg:初回シーケンス:1,2,3,1,2,3,3,4,5,4,5,5,6,7新シーケンス:1,2,3,4,5,6,7,4,5,4,4,5,5,6,7なので、本格的な重み付けは通常uniqueを呼び出してからコンテナを呼び出すeraseメソッドを実現します.
次のように宣言されます.
template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );

パラメータ:処理が必要な要素範囲[first,last)の戻り値:処理後に得られた新しいシーケンス(すなわち、繰り返し要素のない部分)の最後の反復器、すなわち、新しいシーケンスの太字4の位置1,2,3,4,5,6,7,4,5,4,5,5,5,5,5,6,7
サンプルコード
vector<int> v{1,2,3,1,2,3,3,4,5,4,5,6,7};
sort(v.begin(), v.end()); 
v.erase(unique(v.begin(), v.end()), v.end()); 

第2の方法
std::set
コンテナsetは要素が秩序正しく唯一の関連コンテナであり、この特性を利用して重量除去を実現することができる.具体的な方法はvector内の要素をsetにコピーし、setは自動的に重量除去をソートし、vectorを呼び出すことである.assign()関数vectorの要素をsetのコピーで置き換える
サンプルコード
vector<int> v{1,2,3,1,2,3,3,4,5,4,5,6,7};
set<int>si(v.begin(), v.end());
v.assign(si.begin(), si.end());

リファレンスドキュメントcppreference