C++set用法


set是什么?

Q:set是什么?

A:set是c++開發者給你提供的一個集合。

Q:set可以進行什么操作?

A:set可以插入,查詢,排序,遍歷等一些操作。(set自動排序,是一個有序集合)

講了這些,你應該知道set是什么了吧

頭文件:<set>

set聲明方法:set<類型> (name)

迭代器:set<類型>::iterator (NAME)

    set<類型>::reverse_iterator (NAME)

下面看一看set的主要操作:

(name).insert()往集合里插入元素

(name).clear()清除集合里所有元素

(name).erase()刪除集合元素

(name).find()查詢元素是否存在

(name).count()返回某個元素出現了幾次

(name).empty()判斷元素是否為空

(name).size()查詢集合中元素總數

(name).(r)begin()返回第一個指向元素的迭代器

(name).(r)end()返回最后一個指向元素的迭代器

(name).lower_bound()返回第一個大於等於給定值的值的地址

(name).upper_bound()返回第一個大於給定值的值的地址

 

先推薦一道水題洛谷P3370

題目大意:

輸入N個字符串,判斷有幾個不同字符串

 

這就是一道很水的題了,直接看代碼:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
set<string> ss;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        string s;
        cin>>s;
        ss.insert(s);
    }
    printf("%d\n",ss.size());
    return 0;
}

 

我們再進一步,再來看一道題洛谷P2161

這是不是也很水?(會stl與不會的區別

我們維護一個set集合,

然后修改每個的lower_bound(),

最后輸出它的元素的多少就OK了。

代碼:

#include<set>
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
struct cz
{
    int l,r;
    bool operator <(const cz&rhs)const{return r<rhs.r;}
};
set<cz>s;
int n;
char op;
int main()
{
    scanf("%d",&n);
    while(n--)
    {
        cin>>op;
        if(op=='A')
        {
            set<cz>::iterator it;
            int l,r,ans=0;
            cin>>l>>r;
            it=s.lower_bound((cz){0,l});
            while(it!=s.end() && r>=it->l)
            {
                ++ans;
                s.erase(it);
                it=s.lower_bound((cz){0,l});
            }
            cout<<ans<<endl;
            s.insert((cz){l,r});
        }
        else cout<<s.size()<<endl;
    }
    return 0;
}

 另外,有興趣的同學可以去看看map的用法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM