1. 程式人生 > >STL set 詳細用法

STL set 詳細用法

一個集合(set)是一個容器,它其中所包含的元素的值是唯一的。

用到的庫

#include <set>

 

定義

最簡單:

set<int> a;

set和其他的stl一樣,都支援自定義。

因為set會自動將元素從小到大排序,所以我們可以設定它的比較函式,這裡與優先佇列十分相似。

法1 利用自定義比較函式:

#include<stdio.h>
#include<set>
#include<string>
using namespace std;
struct People
{
    string name;
    int age;
};

struct cmp {
    bool operator  ()(People a, People b)
    {
        if(a.name==b.name)return false;
        return a.age<b.age;       //按照年齡由小到大進行排序
    }
};
 

set<People,cmp>s;

法2 運算子過載

#include<stdio.h>
#include<set>
#include<string>
using namespace std;
struct People
{
    string name;
    int age;
    bool operator <(const People p) const  //運算子過載
    {
        if(name==p.name)return false;//按名字去重
        return age<p.age;       //按照年齡由小到大進行排序
    }
 
};

set<People>s;

法3 友元函式

#include<bits/stdc++.h>

using namespace std;

struct People
{
    string name;
    int age;
    friend bool operator <(const People & a,const  People & b)
    {
        if(a.name==b.name)return false;//按名字去重
        return a.age<b.age;       //按照年齡由小到大進行排序
    }
 
};

set<People>s;

遍歷

也是需要一個迭代器進行訪問:

set<People>::iterator it;
for(it=s.begin();it!=s.end();it++)  
{
    printf("姓名:%s 年齡:%d\n",(*it).name.c_str(),(*it).age);
}

訪問set的值需要採用*t的方式。

 

其他用法:

begin();                        第一個元素地址
clear();                         清楚set容器
count(x);                      x元素的個數
empty();                       是否為空
end();                           最後一個元素後面一個的地址
erase(x);                      刪除元素x
find(x);                         查詢元素x,返回地址,若沒有則返回end
insert(x);                      增加元素x
size();                           元素個數