天天看點

轉貼:STL之set使用方法小結

/*

轉貼:STL之set使用方法小結

set/multiset會根據待定的排序準則,自動将元素排序。兩者不同在于前者不允許元素重複,而後者允許。

轉貼:STL之set使用方法小結

1) 不能直接改變元素值,因為那樣會打亂原本正确的順序,要改變元素值必須先删除舊元素,則插入新元素

轉貼:STL之set使用方法小結

2) 不提供直接存取元素的任何操作函數,隻能通過疊代器進行間接存取,而且從疊代器角度來看,元素值是常數

轉貼:STL之set使用方法小結

3) 元素比較動作隻能用于型别相同的容器(即元素和排序準則必須相同)

轉貼:STL之set使用方法小結

set模闆原型://key為元素(鍵值)類型

轉貼:STL之set使用方法小結

template <class key, class compare=less<key>, class alloc=stl_default_allocator(key) >

轉貼:STL之set使用方法小結

從原型可以看出,可以看出比較函數對象及記憶體配置設定器采用的是預設參數,是以如果未指定,它們将采用系統預設方式,

轉貼:STL之set使用方法小結

另外,利用原型,可以有效地輔助分析建立對象的幾種方式

轉貼:STL之set使用方法小結

*/

轉貼:STL之set使用方法小結

#include <iostream>

轉貼:STL之set使用方法小結

#include <string>

轉貼:STL之set使用方法小結

#include <set>

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

using namespace std;

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

struct strless

轉貼:STL之set使用方法小結

{

轉貼:STL之set使用方法小結

   bool operator() (const char *s1, const char *s2) const

轉貼:STL之set使用方法小結

   {

轉貼:STL之set使用方法小結

    return strcmp(s1, s2) < 0;

轉貼:STL之set使用方法小結

   }

轉貼:STL之set使用方法小結

};

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

void printset(set<int> s)

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

copy(s.begin(), s.end(), ostream_iterator<int>(cout, ", ") );

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

// set<int>::iterator iter;

轉貼:STL之set使用方法小結

// for (iter = s.begin(); iter != s.end(); iter++)

轉貼:STL之set使用方法小結

//    //cout<<"set["<<iter-s.begin()<<"]="<<*iter<<", "; //error

轉貼:STL之set使用方法小結

//    cout<<*iter<<", ";

轉貼:STL之set使用方法小結

cout<<endl;

轉貼:STL之set使用方法小結

}

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

void main()

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

//建立set對象,共5種方式,提示如果比較函數對象及記憶體配置設定器未出現,即表示采用的是系統預設方式

轉貼:STL之set使用方法小結

//建立空的set對象,元素類型為int,

轉貼:STL之set使用方法小結

set<int> s1; 

轉貼:STL之set使用方法小結

//建立空的set對象,元素類型char*,比較函數對象(即排序準則)為自定義strless

轉貼:STL之set使用方法小結

set<const char*, strless> s2( strless); 

轉貼:STL之set使用方法小結

//利用set對象s1,拷貝生成set對象s2

轉貼:STL之set使用方法小結

set<int> s3(s1); 

轉貼:STL之set使用方法小結

//用疊代區間[&first, &last)所指的元素,建立一個set對象

轉貼:STL之set使用方法小結

int iarray[] = {13, 32, 19};

轉貼:STL之set使用方法小結

set<int> s4(iarray, iarray + 3);

轉貼:STL之set使用方法小結

//用疊代區間[&first, &last)所指的元素,及比較函數對象strless,建立一個set對象

轉貼:STL之set使用方法小結

const char* szarray[] = {"hello", "dog", "bird" };

轉貼:STL之set使用方法小結

set<const char*, strless> s5(szarray, szarray + 3, strless() );

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

//元素插入:

轉貼:STL之set使用方法小結

//1,插入value,傳回pair配對對象,可以根據.second判斷是否插入成功。(提示:value不能與set容器内元素重複)

轉貼:STL之set使用方法小結

//pair<iterator, bool> insert(value)

轉貼:STL之set使用方法小結

//2,在pos位置之前插入value,傳回新元素位置,但不一定能插入成功

轉貼:STL之set使用方法小結

//iterator insert(&pos, value)

轉貼:STL之set使用方法小結

//3,将疊代區間[&first, &last)内所有的元素,插入到set容器

轉貼:STL之set使用方法小結

//void insert[&first, &last)

轉貼:STL之set使用方法小結

cout<<"s1.insert(

轉貼:STL之set使用方法小結

) : "<<endl;

轉貼:STL之set使用方法小結

for (int i = 0; i <5 ; i++)

轉貼:STL之set使用方法小結

    s1.insert(i*10);

轉貼:STL之set使用方法小結

printset(s1);

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"s1.insert(20).second = "<<endl;;

轉貼:STL之set使用方法小結

if (s1.insert(20).second)

轉貼:STL之set使用方法小結

    cout<<"insert ok!"<<endl;

轉貼:STL之set使用方法小結

else

轉貼:STL之set使用方法小結

    cout<<"insert failed!"<<endl;

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"s1.insert(50).second = "<<endl;

轉貼:STL之set使用方法小結

if (s1.insert(50).second)

轉貼:STL之set使用方法小結

{cout<<"insert ok!"<<endl; printset(s1);}

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"pair<set<int>::iterator::iterator, bool> p;\np = s1.insert(60);\nif (p.second):"<<endl;

轉貼:STL之set使用方法小結

pair<set<int>::iterator::iterator, bool> p;

轉貼:STL之set使用方法小結

p = s1.insert(60);

轉貼:STL之set使用方法小結

if (p.second)

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

   cout<<"insert failed!"<<endl;

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

//元素删除

轉貼:STL之set使用方法小結

//1,size_type erase(value) 移除set容器内元素值為value的所有元素,傳回移除的元素個數

轉貼:STL之set使用方法小結

//2,void erase(&pos) 移除pos位置上的元素,無傳回值

轉貼:STL之set使用方法小結

//3,void erase(&first, &last) 移除疊代區間[&first, &last)内的元素,無傳回值

轉貼:STL之set使用方法小結

//4,void clear(), 移除set容器内所有元素

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"\ns1.erase(70) = "<<endl;

轉貼:STL之set使用方法小結

s1.erase(70);

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"s1.erase(60) = "<<endl;

轉貼:STL之set使用方法小結

s1.erase(60);

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"set<int>::iterator iter = s1.begin();\ns1.erase(iter) = "<<endl;

轉貼:STL之set使用方法小結

set<int>::iterator iter = s1.begin();

轉貼:STL之set使用方法小結

s1.erase(iter);

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

//元素查找

轉貼:STL之set使用方法小結

//count(value)傳回set對象内元素值為value的元素個數

轉貼:STL之set使用方法小結

//iterator find(value)傳回value所在位置,找不到value将傳回end()

轉貼:STL之set使用方法小結

//lower_bound(value),upper_bound(value), equal_range(value) 略

轉貼:STL之set使用方法小結

cout<<"\ns1.count(10) = "<<s1.count(10)<<", s1.count(80) = "<<s1.count(80)<<endl;

轉貼:STL之set使用方法小結

cout<<"s1.find(10) : ";

轉貼:STL之set使用方法小結

if (s1.find(10) != s1.end()) 

轉貼:STL之set使用方法小結

    cout<<"ok!"<<endl;

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

    cout<<"not found!"<<endl;

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"s1.find(80) : ";

轉貼:STL之set使用方法小結

if (s1.find(80) != s1.end()) 

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

//其它常用函數

轉貼:STL之set使用方法小結

cout<<"\ns1.empty()="<<s1.empty()<<", s1.size()="<<s1.size()<<endl;

轉貼:STL之set使用方法小結

set<int> s9;

轉貼:STL之set使用方法小結

s9.insert(100);

轉貼:STL之set使用方法小結

cout<<"s1.swap(s9) :"<<endl;

轉貼:STL之set使用方法小結

s1.swap(s9);

轉貼:STL之set使用方法小結

cout<<"s1: "<<endl;

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

cout<<"s9: "<<endl;

轉貼:STL之set使用方法小結

printset(s9);

轉貼:STL之set使用方法小結

//lower_bound,upper_bound,equal_range(略)

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

///////////////i測試結果/////////////////////////

轉貼:STL之set使用方法小結

s1.insert(

轉貼:STL之set使用方法小結

) :

轉貼:STL之set使用方法小結

0, 10, 20, 30, 40,

轉貼:STL之set使用方法小結

s1.insert(20).second =

轉貼:STL之set使用方法小結

insert failed!

轉貼:STL之set使用方法小結

s1.insert(50).second =

轉貼:STL之set使用方法小結

insert ok!

轉貼:STL之set使用方法小結

0, 10, 20, 30, 40, 50,

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

if (p.second):

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

0, 10, 20, 30, 40, 50, 60,

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

s1.erase(70) =

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

s1.erase(60) =

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

s1.erase(iter) =

轉貼:STL之set使用方法小結

10, 20, 30, 40, 50,

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

s1.count(10) = 1, s1.count(80) = 0

轉貼:STL之set使用方法小結

s1.find(10) : ok!

轉貼:STL之set使用方法小結

s1.find(80) : not found!

轉貼:STL之set使用方法小結
轉貼:STL之set使用方法小結

s1.empty()=0, s1.size()=5

轉貼:STL之set使用方法小結

s1.swap(s9) :

轉貼:STL之set使用方法小結

s1:

轉貼:STL之set使用方法小結

100,

轉貼:STL之set使用方法小結

s9:

轉貼:STL之set使用方法小結

繼續閱讀