○vectorのユニーク

■ユニーク(重なってる値を取り除く)

#include <stdio.h>
#include <vector> 
#include <algorithm>
#include <functional>

struct cell{
	int no;
	char str[64];
};

bool is_eqals(const cell& left, const cell& right)
{
  return (left.no == right.no) ;
}

bool operator<(const cell& left, const cell& right)
{
  return left.no < right.no ;
}

int main(){
	std::vector<cell> data;
	cell a;

	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	
	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	a.no = 4;strcpy(a.str,"4です");
	data.push_back(a);
	a.no = 5;strcpy(a.str,"5です");
	data.push_back(a);

	std::sort(data.begin(),data.end());//昇順ソート ソートが事前に必要
	std::vector<cell>::iterator new_end = std::unique(data.begin(),data.end(),is_eqals);
	data.erase(new_end, data.end());//いらない部分を消す

	{for(int i=0;i<data.size();i++) printf("%s\n",data[i].str);}

	return 0;
}

処理結果
1です
2です
3です
4です
5です

■ユニーク コピー(重なってる値を取り除きコピー(元の配列は変化なし))

#include <stdio.h>
#include <vector> 
#include <algorithm>
#include <functional>

struct cell{
	int no;
	char str[64];
};

bool is_eqals(const cell& left, const cell& right)
{
  return (left.no == right.no) ;
}

bool operator<(const cell& left, const cell& right)
{
  return left.no < right.no ;
}

int main(){
	std::vector<cell> data;
	cell a;

	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	
	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	a.no = 4;strcpy(a.str,"4です");
	data.push_back(a);
	a.no = 5;strcpy(a.str,"5です");
	data.push_back(a);

	std::sort(data.begin(),data.end());//昇順ソート ソートが事前に必要

	std::vector<cell> resolt;
	std::unique_copy(data.begin(),data.end(),std::back_inserter(resolt),is_eqals);

	{for(int i=0;i<resolt.size();i++) printf("%s\n",resolt[i].str);}

	return 0;
}

処理結果
1です
2です
3です
4です
5です




▲トップページ > Windows と C++