○set

2分木によるコンテナです。
常にソートされています。

set	キーの重複が許されない
multiset	キーの重複が許される

■要素数と要素数の上限

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::set<int> set;
	set.insert(4);//値を追加
	set.insert(3);
	set.insert(2);
	set.insert(1);

	printf("要素数 : %d\n",set.size());
	printf("要素数の上限 : %d\n",set.max_size());

	return 0;
}

処理結果
要素数 : 4
要素数の上限 : 1073741823

■先頭から最後まで出力する

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::set<int> set;
	set.insert(4);//値を追加
	set.insert(3);
	set.insert(2);
	set.insert(1);

	std::set< int >::iterator pos = set.begin();//先頭の要素を取得する
	while(pos!=set.end()){//最後の要素に達するまでループ
		printf("%d\n",*pos);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

処理結果
1
2
3
4

■削除

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::set<int> set;
	set.insert(4);//値を追加
	set.insert(3);
	set.insert(2);
	set.insert(1);

	set.erase(3);//要素を削除

	std::set< int >::iterator pos = set.begin();//先頭の要素を取得する
	while(pos!=set.end()){//最後の要素に達するまでループ
		printf("%d\n",*pos);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

処理結果
1
2
4

■範囲を指定して削除

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::set<int> set;
	set.insert(4);//値を追加
	set.insert(3);
	set.insert(2);
	set.insert(1);

	set.erase(set.begin(),set.end());//要素の範囲を削除

	std::set< int >::iterator pos = set.begin();//先頭の要素を取得する
	while(pos!=set.end()){//最後の要素に達するまでループ
		printf("%d\n",*pos);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

処理結果


■multiset(値の重複が許されるset)での削除

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::multiset<int> mset;

	mset.insert(4);//値を追加
	mset.insert(3);
	mset.insert(2);
	mset.insert(1);
	mset.insert(4);
	mset.insert(3);
	mset.insert(2);
	mset.insert(1);

	mset.erase(3);//要素を削除

	std::multiset< int >::iterator pos = mset.begin();//先頭の要素を取得する
	while(pos!=mset.end()){//最後の要素に達するまでループ
		printf("%d\n",*pos);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

処理結果
1
1
2
2
4
4


■検索

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::set<int> set;
	set.insert(4);//値を追加
	set.insert(3);
	set.insert(2);
	set.insert(1);

	std::set< int >::iterator pos = set.find(10);//検索
	if(pos==set.end()) {
		printf("見つかりません\n");
	}else{
		printf("%d\n",*pos);
	}

	return 0;
}

処理結果
見つかりません


■multiset(値の重複が許されるset)での検索

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

	std::multiset<int> mset;

	mset.insert(4);//値を追加
	mset.insert(3);
	mset.insert(2);
	mset.insert(1);
	mset.insert(4);
	mset.insert(3);
	mset.insert(2);
	mset.insert(1);

	std::multiset< int >::iterator pos = mset.lower_bound(2);//先頭の要素を検索して取得する
	while(pos!=mset.upper_bound(2)){//最後の要素を検索してそこに達するまでループ
		printf("%d\n",*pos);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

処理結果
2
2

■構造体の追加と表示

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

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

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

int main(){
	cell a;
	std::set<cell> set;
	a.no = 1;strcpy(a.str,"1です");
	set.insert(a);//値を追加
	a.no = 2;strcpy(a.str,"2です");
	set.insert(a);
	a.no = 3;strcpy(a.str,"3です");
	set.insert(a);
	a.no = 4;strcpy(a.str,"4です");
	set.insert(a);

	std::set<cell>::iterator pos = set.begin();//先頭の要素を取得する
	while(pos!=set.end()){//最後の要素に達するまでループ
		printf("%s\n",pos->str);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

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

■multiset(値の重複が許されるset)構造体の追加と表示

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

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

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

int main(){
	cell a;
	std::multiset<cell> mset;
	a.no = 1;strcpy(a.str,"1です");
	mset.insert(a);//値を追加
	a.no = 2;strcpy(a.str,"2です");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です");
	mset.insert(a);
	a.no = 1;strcpy(a.str,"1です2");
	mset.insert(a);
	a.no = 2;strcpy(a.str,"2です2");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です2");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です2");
	mset.insert(a);

	std::multiset<cell>::iterator pos = mset.begin();//先頭の要素を取得する
	while(pos!=mset.end()){//最後の要素に達するまでループ
		printf("%s\n",pos->str);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

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

■要素と要素数

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

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

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

int main(){
	cell a;
	std::multiset<cell> mset;
	a.no = 1;strcpy(a.str,"1です");
	mset.insert(a);//値を追加
	a.no = 2;strcpy(a.str,"2です");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です");
	mset.insert(a);
	a.no = 1;strcpy(a.str,"1です2");
	mset.insert(a);
	a.no = 2;strcpy(a.str,"2です2");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です2");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です2");
	mset.insert(a);

	printf("要素数 : %d\n",mset.size());
	printf("要素数の上限 : %d\n",mset.max_size());

	return 0;
}

処理結果
要素数 : 8
要素数の上限 : 63161283

■構造体の検索

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

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

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

int main(){
	cell a;
	std::set<cell> set;
	a.no = 1;strcpy(a.str,"1です");
	set.insert(a);//値を追加
	a.no = 2;strcpy(a.str,"2です");
	set.insert(a);
	a.no = 3;strcpy(a.str,"3です");
	set.insert(a);
	a.no = 4;strcpy(a.str,"4です");
	set.insert(a);

	cell b;
	b.no = 3;
	std::set<cell>::iterator pos = set.find(b);//検索
	if(pos==set.end()) {
		printf("見つかりません\n");
	}else{
		printf("%s\n",pos->str);
	}

	return 0;
}

処理結果
3です

■multiset(値の重複が許されるset)構造体の検索

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

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

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

int main(){
	cell a;
	std::multiset<cell> mset;
	a.no = 1;strcpy(a.str,"1です");
	mset.insert(a);//値を追加
	a.no = 2;strcpy(a.str,"2です");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です");
	mset.insert(a);
	a.no = 1;strcpy(a.str,"1です2");
	mset.insert(a);
	a.no = 2;strcpy(a.str,"2です2");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です2");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です2");
	mset.insert(a);

	cell b;//検索のためのキー
	b.no=3;

	std::multiset<cell>::iterator pos = mset.lower_bound(b);//先頭の要素を検索して取得する
	while(pos!=mset.upper_bound(b)){//最後の要素を検索してそこに達するまでループ
		printf("%s\n",pos->str);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

処理結果
3です
3です2

■multiset(値の重複が許されるset)構造体の削除

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

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

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

int main(){
	cell a;
	std::multiset<cell> mset;
	a.no = 1;strcpy(a.str,"1です");
	mset.insert(a);//値を追加
	a.no = 2;strcpy(a.str,"2です");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です");
	mset.insert(a);
	a.no = 1;strcpy(a.str,"1です2");
	mset.insert(a);
	a.no = 2;strcpy(a.str,"2です2");
	mset.insert(a);
	a.no = 3;strcpy(a.str,"3です2");
	mset.insert(a);
	a.no = 4;strcpy(a.str,"4です2");
	mset.insert(a);

	cell b;b.no=3;//削除するキーの作成
	mset.erase(b);//要素を削除

	std::multiset<cell>::iterator pos = mset.begin();//先頭の要素を取得する
	while(pos!=mset.end()){//最後の要素に達するまでループ
		printf("%s\n",pos->str);//値を表示
		pos++;//一つ進める
	}

	return 0;
}

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


■すべての要素の削除

#pragma warning( disable : 4786 )//警告の表示を出なくする

#include <stdio.h>
#include <set>

int main(){

std::set<int> set;
set.insert(4);//値を追加
set.insert(3);
set.insert(2);
set.insert(1);

set.clear();//すべての要素を削除

std::set< int >::iterator pos = set.begin();//先頭の要素を取得する
while(pos!=set.end()){//最後の要素に達するまでループ
	printf("%d\n",*pos);//値を表示
	pos++;//一つ進める
}

return 0;
}

処理結果



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