【C++】任意のデータから重複しない一意データを取得する方法

C++で任意のデータから重複しない一意データを取得するには、

  1. データヒストグラムを作成する
  2. ヒストグラムの各データを一意データとする

だけで良いです。

#include <iostream>
#include <vector>
#include <map>
#include <cstdlib>
#include <ctime>
using namespace std;

template<class T> vector<T> GetUniqueData(vector<T> data)
{
	// ヒストグラム
	map<T, int> hist;
	// 返却用データ
	vector<T> ret;
	
	// ヒストグラム取得
	for(auto itr = data.begin(); itr != data.end(); ++itr)
	{
		hist[*itr]++;
	}
	
	// データ詰め替え
	for(auto itr = hist.begin(); itr != hist.end(); ++itr)
	{
		ret.push_back(itr->first);
	}
	
	return ret;
}

int main()
{
	// 乱数の初期化
	srand((unsigned)time(nullptr));

	// 入力用データ
	vector<int> data(10);
	// 適当なデータの生成
	for(auto itr = data.begin(); itr != data.end(); ++itr)
	{
		*itr = rand() % 10;
		// 出力
		cout << *itr << endl;
	}
	
	// 一意データ
	vector<int> unique = GetUniqueData<int>(data);
	// 出力
	cout << "Unique Data" << endl;
	for(auto itr = unique.begin(); itr != unique.end(); ++itr)
	{
		cout << *itr << endl;
	}
	
	return 0;
}

mapの代わりにsetを使っても同じようなことができますが、速度的にはどちらも大して変わらないです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です