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. 【python cookbook】【数据结构与算法】8.与字典有关的计算问题

    问题:在字典上对数据执行各式各样的计算(比如求最小值.最大值.排序). 解决方案:利用zip()将字典的键-值对“反转”为值-键对序列. 例如:如下字典存放的股票名称和对应的价格: >>& ...

  2. 专为物联网开发的开源操作系统Contiki(转)

    专为物联网开发的开源操作系统Contiki(转)  (2012-04-19 15:31:09) 原文网址:http://blog.sina.com.cn/s/blog_6de000c201010z7n ...

  3. 自动封装Servlet HttpServletRequest请求成为一个POJO对象

    自己写了个小工具类,将Servlet里面的HttpServletRequest请求封装成为一个POJO对象,可以复习一下Java的反射原理,开发中这个没什么用,毕竟都用MVC框架,框架都自带这种功能, ...

  4. C# Driver LINQ Tutorial

    1.介绍 该教程涵盖了1.8版本的C#驱动中的LINQ查询.你可能已经阅读最新的C# Driver Tutorial. 2.快速开始 首先,给程序添加下面的using声明 using MongoDB. ...

  5. api(接口)文档管理工具

    api(接口)文档管理工具 欢迎光临:博之阅API管理平台  ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全  

  6. jQuery添加删除元素

    $(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...

  7. expect语法

    沙河西ftp上传,使用了expect语言的脚本. 我们经常会遇到一些需要与服务器程序打交道的场景,比如,从登陆某个服务器,然后进行某项工作.这很平常,但是如果把这个工作自动化进行,你就需要一个程序能自 ...

  8. 流量分析 seo alexa 排名

    百度权重 举例,百度搜索中输入"中医百科" ,排名前三的: http://www.a-hospital.com/w/中医 1. url是关键词的方式,包含中文名,说明当前百度的搜索 ...

  9. PMO到底什么样?

    PMO到底什么样? 当将来项目办理单位彻底健全了,达到最老练的程度的时分项目办理单位应当干哪些活,有哪些大块功能,也即是关于一个全部的PMO它的功能跟人物都包含啥? 下面这个模型精确的说是英国的项目办 ...

  10. 只使用处理I/O的PrintDigit函数,编写一个过程以输出任意实数

    #include <stdio.h> #include <stdlib.h> #include <math.h> int printDigit(int a) { p ...