【PAT笔记】C++标准模板库STL(二)——set的用法和示例
2. set的常見用法詳解
set翻譯為集合,是一個內部自動有序且不含重復的容器。如果要使用set,需要添加頭文件#include <set>?另外還要加上using namespace std;
PAT中的相關題目有(代碼見下方):
1063 Set Similarity (25 分)
2.1 set的定義
與vector類似,set的定義為set<typename> name,例如:set<int> name;
2.2 set容器內元素的訪問
set只能通過迭代器(iterator)訪問,迭代器格式與vector格式一致,為set<typename>::iterator it=st.begin(); 支持*it訪問。
2.3 set常用函數
(1)insert():insert(x),將x插入set容器中,并自動遞增去重。示例:st.insert(1);
(2)find():find(value)返回set中對應值為value的迭代器。示例:set<int>::iterator it=st.find(2);在set找到2返回迭代器。
(3)erase():刪除set中單個元素或者區間元素。示例:st.erase(2)或者st.erase(it,st.end());刪除元素2到set末尾的元素。
(4)size():size()用來獲得set元素的個數。示例:st.size();。
(5)clear():用來清空set中的所有元素。示例:st.clear()。
現在附上PAT中關于set題目的代碼:?
#include <stdio.h> #include <set> #include <iostream> using namespace std; const int N=51; set<int> st[N];void compare(int a,int b){int totalNum=st[b].size(),sameNum=0; //totalNum為新的元素 for(set<int>::iterator it=st[a].begin();it!=st[a].end();it++){ //it和st[a].end()不能用<或>if(st[b].find(*it)!=st[b].end()) sameNum++; //存在這個數,注意判斷方法 else totalNum++; }printf("%.1f%%\n",sameNum*100.0/totalNum); //100.0要乘在分子上,不能乘在分母上 }int main(){int n,m,k,x,y,z;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&m);for(int j=0;j<m;j++){scanf("%d",&k);st[i].insert(k);}}scanf("%d",&x);for(int i=0;i<x;i++){scanf("%d%d",&y,&z);compare(y,z);}return 0;?
總結
以上是生活随笔為你收集整理的【PAT笔记】C++标准模板库STL(二)——set的用法和示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【PAT笔记】C++标准模板库STL(一
- 下一篇: 【PAT笔记】数学问题——素数和质因数