(6) insert   STL中为什么提供这样的set的insert呢?

这个成员函数存在的目的是为了插入效率的问题。函数参数中的 __position 只是一个提示值,表示在这个位置附近(可前可后)。如果要插入的数据其插入后的位置在 __position 附近的话,使用这个函数可以大大节省插入的时间。反之,如果这两个位置离得很远的话,反而没有用 insert(const value_type& )效率高。

et类的 insert() 的实现讲起来较复杂,举一个简单的例子来说明吧。

设有一排好序的整数序列(不妨假定他们存储在一个整型数组中)如下:
0 1 2 2 5 7 12 34 56 89 100 234

如果想插入下列数列到上面的数列中,要求插入后的数列仍保持有序:
15 12 14 20 25 第一个数 15 按照一般的算法(比如从数列开始搜索的方式)插入,得到插入的位置(在 12 之后)。有了这个位置值之后,下一次我们可以把它作为提示值使用,再次插入数据的时候不是从数列的开始处搜索,而是从这个提示位置开始搜索,定位要插入的数据的位置。如果要插入的数据之间比较接近的话(象上面提供的插入数列那样),由于位置比较接近,可以缩短搜索的次数,从而提高插入数据的效率。 还有很重要的一点,就是,参数不同,返回值也是不同的!single element (1)

pair<iterator,bool>     insert (const value_type& val);

with hint (2)

iterator                insert (iterator position, const value_type& val);

range (3)

template <class InputIterator>
void insert (InputIterator first, InputIterator last);

(7)key_compReturns a copy of the comparison object used by the container.

By default, this is a less object, which returns the same as operator<. 用法:
std::set<T> myset; std::set<T>::key_compare mycomp = myset.key_comp()  

(8)自定义比较函数#include <set>
struct A
{
   int i;
   int j;
bool operator<(A const &ref)const
{  
      return i < ref.i;
}
bool operator==(A const &ref)const
{
    return i == ref.i && j == ref.j;
}
};
int main()
{
A val1 = {1, 2};
A val2 = {2,2};
std::set<A> my_set;
my_set.insert(val1);
my_set.insert(val2);
} 也就是说要在A中重载和A相关的比较运算符号!那么如果A 不是类或者结构体,就没办法重做比较函数了?

有办法!

就是set,不是这种set了!

struct SetCompare
{
bool operator()(const MyPair &it1,const MyPair &it2) const
{
if(it1.second >it2.second)
{
return true;
}
else
return false;

}
};

typedef set<MyPair,SetCompare> MyPairSetComP;
MyPairSetComP MyPairContainComp;

这样就可以!

typedef set<MyPair,SetCompare>  MyPairSetComP;

typedef  set<MyPair>  MyPairSet;

MyPairSetComP MyPairContainComp2=MyPairSetComP(SetCompare());///sucess !

MyPairSet MyPairContainComp2=MyPairSet(SetCompare());               /// failed!

容器 SET part2的更多相关文章

  1. 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

    本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...

  2. 把AspDotNetCoreMvc程序运行在Docker上-part2:修改容器以及发布镜像

    在上一个part<把AspDotNetCoreMvc程序运行在Docker上-part1>,已经将成功将aspdotnetcore程序运行在两个不同的容器中,目前两个容器的内容完全相同,只 ...

  3. Docker 容器

    1.  容器 在过去,如果要开始编写Python应用程序,首先要做的就是在机器上安装Python运行时环境.但是,这就造成了这样一种情况:你的机器上的环境需要完美,以便你的应用程序能够按预期运行,而且 ...

  4. Docker学习4-Containers - 容器

    用Docker方式构建应用程序,从这个应用程序层次结构的底层容器开始.高于此级别的是一项服务,它定义了容器在生产中的行为方式.在顶层是堆栈,它定义了所有服务的交互. Stack  堆栈 Service ...

  5. Docker 入门 第二部分: 容器

    目录 Docker 入门 第二部分: 容器 先决条件 介绍 你的新开发环境 使用 Dockerfile 定义一个容器 Dockerfile 应用本身 requirements.txt app.py 构 ...

  6. Docker 入门(Mac环境)- part 2 容器(container)

    part-2 容器(container) 简介 Docker架构有三个层面,从高到低如下: stack(栈) services(服务) containers(容器) 现在接触的这些在容器这一层里,类似 ...

  7. 把AspDotNetCoreMvc程序运行在Docker上-part3:使用独立的存储容器

    接上一篇博文<把AspDotNetCoreMvc程序运行在Docker上-part2:修改容器以及发布镜像>,这次我们看看如何使用docker存储数据. 背景 之前的示例都只有一个网站应用 ...

  8. Docker 入门之docker容器创建

    使用docker容器的大多数人都是因为想要隔离不同运行环境的差异,使得自己的应用能更好的移植和部署.那么我们来看看掌握docker需要掌握哪些方面. 1,搭建docker环境 2,编译镜像并将其运行成 ...

  9. 《深入浅出 Java Concurrency》—并发容器 ConcurrentMap

    (转自:http://blog.csdn.net/fg2006/article/details/6404226) 在JDK 1.4以下只有Vector和Hashtable是线程安全的集合(也称并发容器 ...

随机推荐

  1. MyBatis里字段到枚举类型的转换/映射

    一.简介 我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是枚举,在DB存储时我们想存的枚举的代号,从DB拿出来时想直接映射成目标枚举类型,也即代号字段与Java枚举类的相互类型转 ...

  2. 基于SQL_ID查看对象大小

    SQL> set echo off set echo off set verify off set serveroutput on set feedback off set lines 200 ...

  3. COJ 0358 xjr考考你数据结构(根号3)线段树区间修改

    xjr考考你数据结构(根号3) 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 请你编写一个数据结构,完成以下功能: 1)求出第 ...

  4. HDU_2052——画矩形

    Problem Description Give you the width and height of the rectangle,darw it.   Input Input contains a ...

  5. Codeforces Round #203 - D. Looking for Owls

    D. Looking for Owls Emperor Palpatine loves owls very much. The emperor has some blueprints with the ...

  6. IntelliJ IDEA创建web项目及异常问题解决

    IDEA配置Tomcat: 1.下载Tomcat,本次使用的是apache-tomcat-6.0.43 2.IDEA配置Tomcat 在idea中的Settings(Ctrl+Alt+s)(或者点击图 ...

  7. SqlServer 挂载本地盘符到服务器端,方面备份还原

    --此脚本要在登录上SqlServer远程服务器后才能执行,把数据库备份到本地(内网使用) --(例如我用本机SqlServer客户端连接上192.168.3.12服务器时,执行脚本,可以把指定数据库 ...

  8. Wamp集成环境安装

    一.Wamp下载 点我下载WampServer2.1a-x32 二.Wamp安装步骤 三.修改语言为汉语 四.查看测试页面

  9. [原创作品] web项目构建(一)

    今天开始,将推出web项目构建教程,与<javascript精髓整理篇>一并更新.敬请关注. 这篇作为这一系列开头,主要讲述web项目的构建技术大全.在众多人看来,web前端开发无非就是写 ...

  10. java关键字-transient

    java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持. Java的serialization提供了一种持久化对象实例的机制.当持久化对象时,可能有 ...