set-概述:

  集合Set是一个容器,它其中所包含的元素的值是唯一的。集合中的元素按一定的顺序排列,并被作为集合中的实例。
一个集合通过一个链表来组织,其具体实现采用了红黑树的平衡二叉树的数据结构。
在插入操作和删除操作上比向量(Vector)快,但查找或添加末尾的元素时会有些慢。
 
 

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)

交换两个链表中的元素

 
 
 
题目练习:
(会陆续添加)
这个题先看一下不用STL的解法:
#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的更多相关文章

  1. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  2. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  3. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

  4. STL: unordered_map 自定义键值使用

    使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...

  5. C++ STL简述

    前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  8. STL sort 函数实现详解

    作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...

  9. STL的使用

    Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...

  10. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

随机推荐

  1. Linux中文显示乱码解决

    输入 echo $LANG可以查看当前使用的系统语言 查看是否有中文语言包可以在终端输入 locale命令,如有zh cn 表示已经安装了中文语言 没有则 yum groupinstall chine ...

  2. java多线程中的生产者与消费者之等待唤醒机制@Version1.0

    一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒:    Object类中提供了三个方法:    wait():等待    notify():唤醒单个线程    notify ...

  3. webservice cxf error:java.lang.IllegalArgumentException: Argument(s) "type" can't be null.

    客户端请求DTO和服务器端的DTO定义不一样,客户端必须定义@XmlAccessorType和@XmlType,如: @XmlAccessorType(XmlAccessType.FIELD) @Xm ...

  4. vsftpd

    vi /etc/vsftpd.conf and add the following allow_writeable_chroot=YES sudo service vsftpd restart

  5. 每日一九度之 题目1031:xxx定律

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6870 解决:4302 题目描述:     对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数 ...

  6. C#的OpenFileDialog和SaveFileDialog的常见用法(转)

    OpenFileDialog openFileDialog1 = new OpenFileDialog();            openFileDialog1.InitialDirectory = ...

  7. URL List

    wifi driver http://wenku.baidu.com/view/5fb275e9b8f67c1cfad6b85e.html http://wenku.baidu.com/view/a5 ...

  8. Android处理图片OOM的若干方法小结 (推荐)

    众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...

  9. Codeforces Round #336 Zuma

    D. Zuma time limit per test:  2 seconds memory limit per test:  512 megabytes input:  standard input ...

  10. C4D to Unity3D插件C2U Tool开源发布!简化你的工作流

    Unity早期有对.c4d文件进行支持,但缩放问题,不支持顶点色,以及目标机器必须安装C4D等都极为蛋疼,这是这款工具开发的初衷之一.C2U工具解决了传统FBX导出的诸多问题,以及脚本链接,Shade ...