c ++ STLコンテナ(2)セットコンテナ

セットはコレクションに変換されます。これは内部で自動的に順序付けられ、繰り返される要素を含まないコンテナセットの定義です

set<typename> name;

set<int> vi;
set<double> vi;
set<char> vi;
set<node> vi;//node可以是结构体

set<int> a[100]; //数组里面每个元素都是一个set集合

insert(x)xをセットコンテナに挿入し、並べ替えと重複排除を自動的に増やします

	//insert(x) 将x插入set容器中,并自动递增排序和去重
	st.insert(4);
	st.insert(3);
	st.insert(1);
	st.insert(2);
	//不支持<it.end()的写法
	for(set<int>::iterator it=st.begin();it!=st.end();it++){
    
    
		cout<<*it<<" ";//1 2 3 4
	}

セットコレクションのトラバーサルは、
イテレータ介してのみトラバースできます。
ベクトルと文字列以外のstlコンテナは、*(it + i)アクセスメソッドをサポートしていません。

//不支持<it.end()的写法
	for(set<int>::iterator it=st.begin();it!=st.end();it++){
    
    
		cout<<*it<<" ";//1 2 3 4
	}

セット内の要素は自動的に昇順で並べ替えられ、重複する要素は自動的に削除されます

find(value)は、セット内の対応する値を持つイテレータを返します

set<int>::iterator it=st.find(3); //查找值为3的元素返回其迭代器 
	cout<<*it<<endl; //如果查找的元素不存在会返回最后一个元素的迭代器 

消去()要素を削除します


//erase() 有两种用法一种是删除单个元素另一种是删除一个区间的所有元素
	//删除单个的方法又有两种
	//1.st.erase(it) it为所删元素的迭代器 可以和find连用 
	 //1 2 3 4
	st.erase(st.find(3)); 
	for(set<int>::iterator it=st.begin();it!=st.end();it++){
    
    
		cout<<*it<<" ";//1 2 4
	}
	cout<<endl;
	//2.st.erase(value) value为所删除元素的值 
	//1 2 4
	st.erase(1);
	for(set<int>::iterator it=st.begin();it!=st.end();it++){
    
    
		cout<<*it<<" ";//2 4
	}
	cout<<endl;
	st.insert(4);
	st.insert(3);
	st.insert(1);
	st.insert(2);
	//删除整个区间 
	//1 2 3 4
	st.erase(st.find(2),st.end());
	
	for(set<int>::iterator it=st.begin();it!=st.end();it++){
    
    
		cout<<*it<<" ";//1
	}

size()は、セット内の要素の数を返します

  //1 2 3 4
    cout<<st.size(); //4

clear()stのすべての要素をクリアします

	st.clear(); 
	cout<<st.size();

empty()空かどうかを判断します

	st.clear(); 
	cout<<st.empty()<<endl;//1 true

lower_bound(k)
upper_bound(k)

	st.insert(4);
	st.insert(3);
	st.insert(1);
	st.insert(2);
	//1 2 3 4
	//lower_bound(k) 返回一个迭代器,指向键值不小于k的第一个元素 
	set<int>::iterator it=st.lower_bound(2);//寻找第一个大于等于2的数 
	cout<<*it<<endl;//2
	//upper_bound(k) 返回一个迭代器,指向键值大于k的第一个元素 
	 it=st.upper_bound(2); 
	 cout<<*it<<endl;//3

おすすめ

転載: blog.csdn.net/qq_44866153/article/details/108976290