STLにおけるset構造の使用

3083 ワード

set集合コンテナ:赤黒ツリーのバランス二叉検索ツリーのデータ構造を実現し、要素を挿入すると、自動的に二叉ツリーの配列を調整し、要素を適切な位置に配置し、各サブツリーのルートノードのキー値が左サブツリーのすべてのノードのキー値より大きく、右サブツリーのすべてのノードのキー値より小さいことを保証する.また,ルートノードの左サブツリーの高さが右サブツリーの高さと等しいことを保証しなければならない.バランス二叉検索ツリーでは、vector、deque、listなどのコンテナよりも検索効率が高い中順遍歴アルゴリズムを使用します.また、中順遍歴を使用すると、キー値を小さいものから大きいものまで遍歴できます.
setセットを構築する主な目的は、キー値を直接変更することなく、迅速に検索することです.
これは前のブログのMapの使い方と似ていて、一つのコードで、よく使う方法を試してみました.
#include
#include
#include 

using namespace std;

int main()
{
	set st;
	string str[4];
	str[0] = "apple";
	str[1] = "banana";
	str[2] = "orange";
	str[3] = "orange";
	
	// set       。 
	//              ,      。
	//        ,  str[3]      ,      ,           
	
	
	//  map,          。 
	pair::iterator, bool> success; 
	success = st.insert(str[1]); 
	if(success.second==true)
	{
		cout<::iterator it;
	for(it=st.begin();it!=st.end();it++)
	{
		//  iterator            ,       , *   
		cout<< *it << endl;
		 
	}
	cout<

このタイプの使用は日常の試合でよく使われるのは、添削検査です.文章中の単語の数を統計すると、重複は集合データに影響を与えません.
例題hdu 2072のように
単語数
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 51789    Accepted Submission(s): 12737
Problem Description
lilyの親友xiaoou 333は最近暇で、彼は意味のないことを考えて、1つの文章の中の異なる単語の総数を統計しました.次のあなたの任務はxiaoou 333を助けてこの問題を解決することです.
 
Input
複数のデータがあり、各グループは1行で、各グループは小さな文章です.各記事は小文字とスペースで構成され、句読点がなく、#に遭遇したときに入力が終了します.
 
Output
各グループは1つの整数しか出力されず、単独で行になります.この整数は1つの文章の異なる単語の総数を表します.
 
Sample Input
 
   
you are my friend #
 

Sample Output
 
   
4
 
AC代码,

#include
#include
#include
#include
using namespace std;


int main()
{
	string s;
	while(getline(cin,s) && s!="#")
	{
		istringstream str(s);
		string sp;
		set words;
		while(str>>sp)
		{
			words.insert(sp);
		}	
		cout<

ここでは、文字列を文字列反復器のようにして、文字ストリームを順番に取り出し、スペースをストリームにしないのが良いデータクラスistringstreamを使います.これにより文字列のスペースカットが実現されます.
これは#includeに属してから詳しく勉強します.ここではまず問題について、小さなテストコードを書いて、理解を助けます.
#include
#include
#include
#include
using namespace std;
int main()
{
	string str = "i am a boy";
	istringstream its(str);
	string s;
	while(its>>s)
	{
		cout<