set-概述:
set c |
产生一个空的set/multiset,其中不含任何元素 |
set c (op) |
以op为排序准则,产生一个空的set/multiset |
set c1(c2) |
产生某个set/multiset的副本,所有元素均被复制 |
set c (beg, end) |
以区间[beg; end]内的元素产生一个set/multiset |
set c (beg, end, op) |
以op为排序准则,利用[beg; end]内的元素生成一个set/multiset |
c.~ set () |
销毁所有元素,释放内存 |
iterator begin() iterator end() |
返回指向第一个元素的迭代器 返回指向末尾(最后一个元素之后)的迭代器 |
void clear() |
清空set容器 |
bool empty() |
如果为空返回true,否则返回false |
iterator insert(TYPE &val ) |
插入一个元素,返回新元素的位置 |
iterator insert(iterator pos, TYPE &val) |
插入一个元素,返回插入元素的位置(pos是一个提示,指出插入操作的搜寻起点。如果提示恰当,可大大加快速度) |
void insert(input_iterator start, input_iterator end ) |
插入[start, end)之间的元素到容器中 |
void erase(iterator pos) void erase(iterator start, iterator end) size_type erase(const TYPE &val) |
删除pos所指元素 删除[start, end)之间的元素 删除值为val的元素并返回被删除元素的个数 |
size_type count(const TYPE &val) |
查找容器中值为val的元素的个数 |
iterator find(const TYPE &val) |
返回一个迭代器指向键值为val的元素,如果没有找到就返回end() |
size_type size() |
返回元素的数量 |
void swap(set &object) |
交换两个链表中的元素 |
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; char *a[10000]; char b[10000]; int main() { while (gets(b) && b[0] !='#') { int flag = 0; char *p = b; int i = 0; int num = 0; memset(a, 0 ,sizeof(a)); while ( (a[i] = strtok(p, " ")) != NULL) { i ++; p = NULL; } for (int j = 0; j<i; j++) { num = 0; for (int k = j+1; k<i; k++) { if (strcmp(a[j],a[k]) == 0) num++; } if (num != 0) flag ++; } cout << i-flag<< endl; } return 0; }
有人用map解的:
#include<map> #include<string> #include<iostream> using namespace std; int main(){ string s; map<string,int>Map; while(getline(cin,s)&&s!="#") { int a=0; string str; Map.clear(); int len=s.length(); for(int i=0;i<len;i++){ if(s[i]=='#') break; str.clear(); while(s[i]>='a'&&s[i]<='z'){ str+=s[i]; i++; a=1; } if(a==1) { Map[str]++; a=0; } } int ans=Map.size(); cout<<ans<<endl; } return 0; }
不过, 草滩小恪感觉此题还是用set切, 切的更清晰, 更爽些!
#include<iostream> #include<string> #include<sstream> #include<set> using namespace std; const int MAXN = 100000; char line[MAXN]; int main() { set<string>s; while(cin.getline(line, MAXN)) { if(line[0]=='#') break; s.clear(); stringstream ss(line); string str; while(ss>>str) s.insert(str); cout<<s.size()<<endl; } return 0; }