STL提供了四种联合容器 set,multiset,map,multimap;

set and multiset在<set>头文件

map and multimap在<map>头文件

模板函数都一样的http://www.cnblogs.com/jinmingyi/p/6798359.html

set/map中迭代器不能++或--,因为不是连续的序列,是树。

set:

在set中,值就是关键字,集合中不会有多个相同的关键字,且始终按从小到大的顺序排列

可反转可排序,关键字是唯一的,只能存储同一个类型的值

 #include<iostream>
#include<set>
using namespace std;
void update(set<int>&s,set<int>::iterator it,int i)
{
int x = *it; //使x保存当前迭代器指向的数值
x += i; //x更改为需要的数值
s.erase(*it); //删除set中迭代器指向的数值*it
s.insert(x); //将新的x插入set
}
int main()
{
set<int>s; //声明一个set
for (int i = ; i < ; i++)
{
s.insert(i); //向set中插入数值
}
set<int>::iterator it;
int i;
if (s.find() == s.end())
cout << "no 2" << endl;
else
cout << "yes" << endl;
for (i=,it = s.begin(); it != s.end(); i++)
{
update(s,it, i); //不能对set中已有的数值操作 自己写个更新函数
it = s.find(i);
}
}

map:

map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的

声明一个map: map<下标的类型,对应数据的类型>name;

 #include<map>
#include<iostream>
#include<string>
using namespace std;
int main()
{
map<string, int>mp; //声明一个map
mp["abc"] = ; //向map中添加一个数据
map<string, int>::iterator it;//声明一个迭代器
it = mp.find("aaa");//find函数返回一个迭代器,找到返回对应迭代器,否则返回end()
if (it == mp.end())
cout << "no" << endl;
}

还有这两个都可以用lowet_bound()  (大于等于的第一个)和upper_bound()  (绝对大于的第一个,双写p!)  返回的都是迭代器。

写博中发现一个细节:迭代器it对应的元素被删掉了,就不能在it++或it--;

如果

c++ STL 容器——联合容器的更多相关文章

  1. C++ STL之list容器的基本操作

    由于list和vector同属于序列式容器,有很多相同的地方,而上一篇中已经写了vector,所以这一篇着重写list和vector的不同之处和特有之处. 特别注意的地方: (1)STL中迭代器容器中 ...

  2. ###STL学习--关联容器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...

  3. stl中的容器、迭代器和算法----vector中的find实现

    来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...

  4. 带你深入理解STL之Vector容器

    C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...

  5. STL中的容器介绍

    STL中的容器主要包括序列容器.关联容器.无序关联容器等. 一]序列容器 (1) vector vector 是数组的一种类表示,提供自动管理内存的功能,除非其他类型容器有更好满足程序的要求,否则,我 ...

  6. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  7. STL——关联式容器

    一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tre ...

  8. STL——序列式容器

    一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...

  9. STL标准库-容器适配器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...

随机推荐

  1. Linux网络服务10——远程访问及控制

    Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数 ...

  2. 枚举:enum——初写

    入门的时候,针对某一字段状态的判断,一开始是在前端用if else 判断,有一些弊端:①把内置的code暴露给用户②if else最好不要超过3层③前端很长一段冗余判断不规范后改进使用枚举,在后台进行 ...

  3. phpstrom识别phalcon框架模板文件的配置

  4. js判断一个数组是否为空

    var s = []; if(s.length == 0){ alert('空数组'); }

  5. Gist - ES6 Promise

    The concept of "Promise" Promise is used to asynchronous computations. Introduction " ...

  6. JavaScript函数的各种调用模式

    函数是JavaScript世界里的第一公民,换句话来说,就是我们如果可以精通JavaScript函数的使用,那么对JavaScript的运用可以更游刃有余了.熟悉JavaScript的人应该都知道,同 ...

  7. Python3中文件处理

    1.txt,xls,doc等文件的使用 f=open("filename","w")   打开一个用于写入的文件,要写入内容时使用f.write("内 ...

  8. mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程)

    写在最前 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生M ...

  9. php---tp框架---表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册"自动验证"一章 ...

  10. Pandas数据处理实战:福布斯全球上市企业排行榜数据整理

    手头现在有一份福布斯2016年全球上市企业2000强排行榜的数据,但原始数据并不规范,需要处理后才能进一步使用. 本文通过实例操作来介绍用pandas进行数据整理. 照例先说下我的运行环境,如下: w ...