c++ STL 容器——联合容器
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 容器——联合容器的更多相关文章
- C++ STL之list容器的基本操作
由于list和vector同属于序列式容器,有很多相同的地方,而上一篇中已经写了vector,所以这一篇着重写list和vector的不同之处和特有之处. 特别注意的地方: (1)STL中迭代器容器中 ...
- ###STL学习--关联容器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...
- stl中的容器、迭代器和算法----vector中的find实现
来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...
- 带你深入理解STL之Vector容器
C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...
- STL中的容器介绍
STL中的容器主要包括序列容器.关联容器.无序关联容器等. 一]序列容器 (1) vector vector 是数组的一种类表示,提供自动管理内存的功能,除非其他类型容器有更好满足程序的要求,否则,我 ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- STL——关联式容器
一.关联式容器 标准的STL关联式容器分为set(集合)/map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和 multimap(多键映射表).这些容器的底层机制均以RB-tre ...
- STL——序列式容器
一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...
- STL标准库-容器适配器
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...
随机推荐
- 微信jssdk分享功能,jssdk成功调用,分享内容自定义失败
前提:调用微信jssdk分享功能,通过微信开发者工具调试,调用正常,无任何报错信息. 问题:调用成功,且开发者工具正常显示,但是通过真机调试,分享出去后,自定义内容失效,为微信自动获取的默认内容!截止 ...
- oracle创建数据库表空间 用户 授权 导入 导出数据库
windows下可以使用向导一步一步创建数据库,注意编码. windows连接到某一个数据库实例(不然会默认到一个实例下面):set ORACLE_SID=TEST --登录开始创建表空间及可以操作的 ...
- grub2详解(翻译和整理官方手册)
翻译了grub2官方手册的绝大部分内容,然后自己整理了一下.因为内容有点杂,所以章节安排上可能不是太合理,敬请谅解. 本文目录: 1.1 基础内容 1.2 安装grub2 1.3 grub2配置文件 ...
- session或memcache过期之后跳转到登陆页面并跳出iframe框架
<!--在你想控制跳转的页面,比如login.html中的<head>与</head>之间加入以下代码:--> <script> if (window ...
- Swift计算字符数量
通过调用全局 countElements 函数并将字符串作为参数进行传递可以获取该字符串的字符数量. let unusualMenagerie = "Koala
- asp.net使用qq邮箱发送邮件
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...
- [leetcode-535-Encode and Decode TinyURL]
TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/desi ...
- [leetcode-532-K-diff Pairs in an Array]
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...
- vijos1080题解
题目: 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,20 ...
- OpenCV3.2 + VS2015环境配置
一.准备工作: (1) 到OpenCV的官网(http://opencv.org/)下载OpenCV3.2 (2) 安装好VS2015. (3) 计算机系统:Win7(Win8, Win1 ...