IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 8.18C++:关联容器、无序关联容器、集合(set)、upper_bound和lower_bound -> 正文阅读

[C++知识库]8.18C++:关联容器、无序关联容器、集合(set)、upper_bound和lower_bound

关联容器的特点和接口

常用接口与顺序容器类似
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2 无序关联容器

  1. C++11新标准中定义了4个无序关联容器
    unorderedset、unorderedmap、unorderedmultiset、unorderedmultimap
  2. 不是使用比较运算符来组织元素的,而是通过一个哈希函数和键类型的==运算符。
  3. 提供了与有序容器相同的操作
  4. 可以直接定义关键字是内置类型的无序容器。
  5. 不能直接定义关键字类型为自定义类的无序容器,如果需要,必须提供我们自己的hash模板

3 集合(set)

#include <iostream>
#include <iterator> //包含copy函数
#include <set>
#include <utility>  //包含pair
using namespace std;
int main()
//输入一串实数,将重复的去掉,取最大和最小者的中值,分别输出小于等于此中值和大于等于此中值的实数
{
    set<double> s;
    while (1) {
        double v;
        cin >> v;
        if (v == 0)  // 输入0表示结束
            break;
        pair<set<double>::iterator, bool> r = s.insert(v); //set.insert(单参数)的返回值是一个pair
        if (!r.second) //如果插入值已存在,pair的布尔值返回false
            cout << v << " is duplicated" << endl;
    }
    set<double>::iterator iter1 = s.begin(); //获取集合的首元素迭代器
    set<double>::iterator iter2 = s.end();  //获取集合的第二个元素迭代器
    double medium = (*iter1 + *(--iter2)) / 2;
    cout << "<= medium 的数有:";
    copy(s.begin(), s.upper_bound(medium), ostream_iterator<double>(cout, "  "));
    cout << endl;
    cout << ">= medium 的数有:";
    copy(s.lower_bound(medium), s.end(), ostream_iterator<double>(cout, "  "));
    cout << endl;
    return 0;
}

pair包含在头文件< utility >中
集合的单元素insert()函数返回值是pair对组型。队组的第一个成员是指向欲插入元素的迭代器,第二个成员是一个布尔量,表示本次操作是否成功。
如果元素已存在于集合中,first指向集合中的已存在元素,second返回false;

4 upper_bound和lower_bound

upper_bound和lower_bound

lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。

二者的命名方式显示了其用法
lower_bound的判定条件是大于等于,所以用其作下界,可以包含num这个值。
upper_bound的判定条件是大于,用其作上届正好可以包含num这个值。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 11:52:27  更:2021-08-19 11:52:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 11:16:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码