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. 161208、Java enum 枚举还可以这么用

    在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...

  2. Spring注解@Scheduled定时任务

    一.首先配置applicationContext-task.xml (1)添加 xmlns:task="http://www.springframework.org/schema/task& ...

  3. 进度条,随机数---demo笔记【原创】

    本人学习笔记,参考网上代码完成 makefile TEST_OBJ := rng_app MAKEOPT := ARCH=arm CROSS_COMPILE=arm-none-linux-gnueab ...

  4. error:could not open D:\java\jre1.8\lib\i386\jvm.cfg

    复制一份jre到eclipse的目录下就可以了.

  5. 优秀的web前端工程师要具备什么

    优秀的前端工程师需要具备良好的沟通能力,因为你的工作与很多人的工作息息相关.在任何情况下,前端工程师至少都要满足下列四类客户的需求. 产品经理--这些是负责策划应用程序的一群人.他们能够想象出怎样通过 ...

  6. Prince2的七大原则(5)

    [Prince2科普]Prince2的七大原则(5) 按照惯例我们先来回顾一下,PRINCE2七大原则分别是指:持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第五个原则 ...

  7. CI框架分页类

    分页类1.分页类参数说明 'base_url' => 指向你的分页所在的控制器类/方法的完整的 URL, 'total_rows' => 数据的总行数, 'per_page' => ...

  8. ASP.net 上传

    if (FileUpload1.HasFile) { string filename = FileUpload1.PostedFile.FileName; string dir_file = &quo ...

  9. hdu4935 Prime Tree(2014多校联合第七场)

    首先这是一道dp题,对题意的把握和对状态的处理是解题关键. 题目给出的范围是n在1到1e11之间,由于在裂变过称中左儿子总是父亲节点的一个非平凡约数,容易看出裂变过程只与 素数幂有关,并且显然有素数不 ...

  10. A Round Peg in a Ground Hole(凸包应用POJ 1584)

    A Round Peg in a Ground Hole Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5684 Accepte ...