set提供一个不重复元素的集合,一般不能直接修改元素。因为这样可能会造成重复元素
因此必须删除旧元素,再插入新元素。
看下面程序:分析每句的功能。
#include<set>
#include<iostream>
using namespace std;
int main()
{
 set<int> s;//1
 s.insert(9);
 s.insert(3);
 s.insert(5);
 s.insert(7);
 s.insert(1);
 set<int>::const_iterator iter;
 for(iter = s.begin(); iter != s.end(); iter++)
 {
  cout<<*iter<<endl;
  const_cast<int&>(*iter)= 1; //a
 }
 cout<<"after"<<endl;
 for(iter = s.begin(); iter != s.end(); iter++)
 {
   cout<<*iter<<endl;
 }
 cout<<"s.size()="<<s.size()<<endl;
 return 0;
}
第一句构造一个set,
第二句插入一个元素,
关键在于a处:修改元素为1
最后输出各个元素均为1,
这个提供一个反例。以证明不要直接修改set的元素值,否则将会出现重复元素。不过这可能是vc的实现,其他平台可能结果不同,程序在vc6.0下运行通过。
 
 

set容器只是单纯的键的集合,键必须为一。set容器不支持下标操作,而且没有定义maped_type类型。在set容器中,value_type不是pair类型,而是与key_type类型相同的类型。

1.在set中添加元素

set<string> set1;

set1.insert("the");

set1.insert("end");

也可以添加一对迭代器,如下:

set1.insert(set33.begin(),set33.end());

这个方法返回void

带有一个键参数的insert版本返回pair类型对象,包含一个迭代器和bool值,迭代器指向拥有该键德曼元素,而bool值则表明是否添加了该元素。

2.从set中获取元素

set1.find(sting ss);方法返回指向在set1中ss的迭代器

set1.count(string ss);返回的值只可能是0或者1(0表示不存在,1表示存在).

set中的键为const类型。

常用的几个方法 
  boolean add(E e) 
  如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
  boolean addAll(Collectionc) 
  如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。
  void clear() 
  移除此 set 中的所有元素(可选操作)。
  boolean contains(Object o) 
  如果 set 包含指定的元素,则返回 true。
  boolean containsAll(Collectionc) 
  如果此 set 包含指定 collection 的所有元素,则返回 true。
  boolean equals(Object o) 
  比较指定对象与此 set 的相等性。
  int hashCode() 
  返回 set 的哈希码值。
  boolean isEmpty() 
  如果 set 不包含元素,则返回 true。
  Iterator iterator() 
  返回在此 set 中的元素上进行迭代的迭代器。
  boolean remove(Object o) 
  如果 set 中存在指定的元素,则将其移除(可选操作)。
  boolean removeAll(Collectionc) 
  移除 set 中那些包含在指定 collection 中的元素(可选操作)。
  boolean retainAll(Collectionc) 
  仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
  int size() 
  返回 set 中的元素数(其容量)。
  Object[] toArray() 
  返回一个包含 set 中所有元素的数组。
  T[]
  toArray(T[] a)
 
  返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。

set的用法的更多相关文章

  1. set<pair<int,int> >的用法

    例题链接:https://vjudge.net/contest/236677#problem/D 题意:首先输入两个数字n,m.n表示有n张桌子,编号从1到n,m表示有m个操作, 然后接下来一行有n个 ...

  2. set<pair<int,int> > 的运用

    In this cafeteria, the N tables are all ordered in one line, where table number 1 is the closest to ...

  3. binarySearch(int[] a,int fromIndex,int toIndex, int key)的用法

    package com.Summer_0420.cn; import java.util.Arrays; /** * @author Summer * binarySearch(int[] a,int ...

  4. Python中int()函数的用法浅析

      int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int)  Help on class int in module __builti ...

  5. c++ 中pair类模板的用法详解

    pair: 头文件:#include<utility> 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类 ...

  6. 数制转换itoa atoi int转字符串 字符串转int string转int int转string

    在苦于昨晚最后一个数制转换题,他的转换结果必须是整形数,纳尼?转换完放数组里又要变成整形数.这是什么操作,而且如果是16进制,用字母A,B-表示,在进行运算时都难以计算. 突发奇想,当十进制成立的时候 ...

  7. C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);

    问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,&l ...

  8. Undefined symbols for architecture i386: "MyGetOpenALAudioData(__CFURL const*, int*, int*, int*)"

    今天把apple developer上的例子程序oalTouch中的MyOpenALSupport.h和MyOpenALSupport.c添加到自己的工程中,并在另一个文件xxx.cpp里调用,结果出 ...

  9. 自定义函数中的参数返回值 “-> (Int -> Int)”的问题

    func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { + number } retur ...

  10. void (*f(int, void (*)(int)))(int) 函数解析 转

    今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往往使初学者 ...

随机推荐

  1. Android 蹲坑的疑难杂症集锦一

    各位看官老爷子你们好,我就是那个挖坑不埋,还喜欢开新矿的小喵同志. 问大家一个问题,在Github上找项目的时候,看到中文简介说明你们是不是觉得这个项目很low不屑一顾? 最近朋友无意中说,在Gith ...

  2. CodeForces 19D Points(线段树+map)

    开始想不通,后来看网上说是set,就有一个想法是对每个x建一个set...然后又想直接建立两重的set就好,最后发现不行,自己想多了...  题意是给你三种操作:add (x y) 平面添加(x y) ...

  3. flv文件格式解析!!!

    flv头 FLV header 总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成. Signature: FLV 文件的前3个字 ...

  4. Redis 的 5 个常见使用场景

    2015-07-22 23:31:46 本文由 伯乐在线 - 刘晓鹏 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:Joe Engel.欢迎加入翻译组. 在这篇文章中,我们将阐述 Redis 最常 ...

  5. cf 二分图

    题目链接:http://vjudge.net/contest/133033#problem/C 题目大意:给你n个点,m条边,将其分成两个集合,集合A是图的一个点覆盖,集合B也是图的一个点覆盖,要求集 ...

  6. SlidesJS的使用

    项目中对slideshow要求要有触屏滑动换图功能,就想到了SlidesJS这个Jquery插件 例排,先把静态html写好 <div id="cm_slides"> ...

  7. STL UVA 11991 Easy Problem from Rujia Liu?

    题目传送门 题意:训练指南P187 分析:用vector存id下标,可以用map,也可以离散化用数组存(发现不用离散化也可以) map #include <bits/stdc++.h> u ...

  8. get请求

    写在前面的话 XMLHttpRequest对象的open方法的第一个参数为request-type,取值可以为get或post.本篇介绍get请求. get请求的目的,主要是为了获取数据.虽然get请 ...

  9. The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540

    Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Othe ...

  10. Mac OS Storm+Kafka+Zookeeper配置

    先补充一个前两天mac配置的文档. 首先确定由jdk scala环境 JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/Cu ...