○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++