// 集合の簡単な使用例
#include < iostream>
#include < set>
#include < string>
using namespace std;
int main()
{
set< string> s;
// 文字列の集合を作成する
s.insert("Telescope");
s.insert("House");
s.insert("Computer");
s.insert("Mouse");
set< string>::iterator p = s.begin();
do {
cout << *p << " ";
p++;
} while(p != s.end());
cout << endl;
p = s.find("Telescope");
if(p != s.end())
cout << "Found Telescope\n";
return 0;
}
// setにクラスオブジェクトを格納する
#include < iostream>
#include < set>
#include < string>
using namespace std;
// 州と州都を格納するクラス
class state {
string name;
string capital;
public:
state() { name = capital = ""; }
// 州の名前だけを持つ一時的なオブジェクトを構築する
state(string s) { name = s; capital = ""; }
// 完全なstateオブジェクトを構築する
state(string n, string c)
{
name = n;
capital = c;
}
string get_name() { return name; }
string get_capital() { return capital; }
};
// 州の名前でオブジェクトを比較する
bool operator<(state a, state b)
{
return a.get_name() < b.get_name();
}
// stateに対する<<演算子を定義する
ostream &operator<<(ostream &s, state &o)
{
s << o.get_name() << "'s capital is ";
s << o.get_capital() << "." << endl;
return s;
}
int main()
{
set< state> states;
// 集合を初期化する
states.insert(state("Illinois", "Springfield"));
states.insert(state("Wisconsin", "Madison"));
states.insert(state("Missouri", "Jefferson City"));
states.insert(state("California", "Sacramento"));
states.insert(state("Nevada", "Carson City"));
states.insert(state("Arkansas", "Little Rock"));
states.insert(state("Alaska", "Juneau"));
states.insert(state("West Virginia", "Charleston"));
// 集合の要素を表示する
set< state>::iterator p = states.begin();
do {
cout << *p;
p++;
} while(p != states.end());
cout << endl;
// 特定の州を検索する
cout << "Looking for Wisconsin.\n";
p = states.find(state("Wisconsin"));
if(p != states.end()) {
cout << "Found.\n";
cout << *p;
}
else
cout << "State not in list.\n";
return 0;
}
// multisetにクラスオブジェクトを格納する
#include < iostream>
#include < set>
#include < string>
using namespace std;
// 著者名をインデックスとして書籍に関する情報を格納するクラス
class book {
string author;
string title;
string publisher;
string date;
public:
book() { title = author = publisher = date = ""; }
// キーの著者名だけを持つ一時的なオブジェクトを構築する
book(string a) { author = a;
title = publisher = date = ""; }
// 完全なbookオブジェクトを格納する
book(string t, string a, string p, string d)
{
title = t;
author = a;
publisher = p;
date = d;
}
// 著者の名前だけを返す
string get_author() { return author; }
// 書籍に関するすべての情報を取得する
void get_info(string &t, string &a, string &p, string &d)
{
t = title;
a = author;
p = publisher;
d = date;
}
};
// 著者名でオブジェクトを比較する
bool operator<(book a, book b)
{
return a.get_author() < b.get_author();
}
// bookに対する<<演算子を定義する
ostream &operator<<(ostream &s, book &o)
{
string t, a, p, d;
o.get_info(t, a, p, d);
s << a << endl;
s << t << endl;
s << p << endl;
s << d << endl;
return s;
}
int main()
{
multiset< book> booklist;
string a;
// 集合を初期化する
booklist.insert(book("C++: The Complete Reference",
"Schildt", "Osborne/McGraw-Hill",
"1998"));
booklist.insert(book("C++ From The Ground Up",
"Schildt", "Osborne/McGraw-Hill",
"1998"));
booklist.insert(book("Teach Yourself C++",
"Schildt", "Osborne/McGraw-Hill",
"1997"));
booklist.insert(book("Executive Orders",
"Clancy", "Putnam",
"1996"));
booklist.insert(book("The Hunt for Red October",
"Clancy", "Berkeley",
"1985"));
booklist.insert(book("Red Storm Rising",
"Clancy", "Berkeley",
"1987"));
booklist.insert(book("Sphere",
"Crichton", "Ballantine",
"1987"));
booklist.insert(book("Jurassic Park",
"Crichton", "Ballantine",
"1990"));
booklist.insert(book("The Lost World",
"Crichton", "Knopf",
"1995"));
// 集合の要素を表示する
multiset< book>::iterator p = booklist.begin();
do {
cout << *p << endl;
p++;
} while(p != booklist.end());
cout << endl;
// 特定のbookを探す
cout << "Enter author: ";
cin >> a;
p = booklist.find(book(a));
if(p != booklist.end()) {
do {
cout << *p << endl;
p++;
} while(p != booklist.upper_bound(a));
}
return 0;
}
// 選択形式の質問への回答をmultisetを使って記録する
#include < iostream>
#include < set>
using namespace std;
enum response { strong_agree, agree, disagree,
strong_disagree, no_opinion };
int main()
{
multiset< response> question;
// 回答を作成する
question.insert(response(strong_agree));
question.insert(response(agree));
question.insert(response(strong_agree));
question.insert(response(strong_disagree));
question.insert(response(disagree));
question.insert(response(disagree));
question.insert(response(no_opinion));
question.insert(response(agree));
question.insert(response(strong_agree));
// 結果を表示する
cout << "まったくそう思う: ";
cout << question.count(strong_agree) << endl;
cout << "そう思う: ";
cout << question.count(agree) << endl;
cout << "そう思わない: ";
cout << question.count(disagree) << endl;
cout << "まったくそう思わない: ";
cout << question.count(strong_disagree) << endl;
cout << "どちらとも言えない: ";
cout << question.count(no_opinion) << endl;
return 0;
}