STL--set
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[];
char b[]; int main()
{
while (gets(b) && b[] !='#')
{
int flag = ;
char *p = b;
int i = ;
int num = ;
memset(a, ,sizeof(a));
while ( (a[i] = strtok(p, " ")) != NULL)
{
i ++;
p = NULL;
}
for (int j = ; j<i; j++)
{
num = ;
for (int k = j+; k<i; k++)
{
if (strcmp(a[j],a[k]) == )
num++;
}
if (num != )
flag ++;
}
cout << i-flag<< endl;
}
return ;
}
有人用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=;
string str;
Map.clear();
int len=s.length();
for(int i=;i<len;i++){
if(s[i]=='#')
break;
str.clear();
while(s[i]>='a'&&s[i]<='z'){
str+=s[i];
i++;
a=;
}
if(a==)
{
Map[str]++;
a=;
}
}
int ans=Map.size();
cout<<ans<<endl;
}
return ;
}
不过, 草滩小恪感觉此题还是用set切, 切的更清晰, 更爽些!
#include<iostream>
#include<string>
#include<sstream>
#include<set>
using namespace std; const int MAXN = ; char line[MAXN]; int main()
{
set<string>s;
while(cin.getline(line, MAXN))
{
if(line[]=='#') break;
s.clear();
stringstream ss(line);
string str;
while(ss>>str)
s.insert(str);
cout<<s.size()<<endl;
}
return ;
}
STL--set的更多相关文章
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- STL的std::find和std::find_if
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- C++ STL简述
前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL的使用
Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...
随机推荐
- android 常用命令
1.查看当前手机界面的 Activity dumpsys | grep "mFocusedActivity" 查看任务栈 dumpsys | grep "Hist&q ...
- android 下的技巧
1.删除屏幕的手势锁定 adb shell #登录 su $切换到su用户(手机需要root) cd /data/system #切换目录 rv gesture.key # 删除锁屏文件,然后进去的时 ...
- Oracle集合运算符 交集 并集 差集
集合运算符:UNION/UNION ALL 并集,INTERSECT 交集,MINUS 差集 一.union求并集,公共部分只有包含一次 例:求emp表ename中含’A‘或含有‘M’ SQL&g ...
- Java String类中的intern()方法
今天在看一本书的时候注意到一个String的intern()方法,平常没用过,只是见过这个方法,也没去仔细看过这个方法.所以今天看了一下.个人觉得给String类中加入这个方法可能是为了提升一点点性能 ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.9.Progressbar控件
Progressbar控件用来显示任意进程的完成百分比. 默认安装启用 配置选项 控件暴露的事件API progressbar暴露的独一无二的方法 一些现实生活的例子 当前版本中,我们或系统必须明确进 ...
- android5.0 编译
android5.0编译需要jdk1.7版本,将来本地可能需要同时维护两套jdk版本,请参考: 在线安装openjdk1.7 sudo apt-get install openjdk-7-jre op ...
- ie6下兼容问题
最小高度问题:overflow:hidden 在ie6.7下 li本身不浮动 内容浮动 li产生3像素间隙 解决:vertical-align:top; 二.当ie6下最小高度问题和li间隙问题共存时 ...
- java 1G大文件复制
对比几种复制方法 复制的文件是980m的txt文件 1. FileChannel 方法 代码: public static void mappedBuffer() throws IOExceptio ...
- DelegateCommand.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- Android GridView 第一个Item 点击没反应
@Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHo ...