首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ STL Set:找不到()最后插入的元素

C++ STL Set是C++标准模板库中的一种容器,它是一个有序的集合,其中的元素按照特定的排序规则进行存储。当我们向Set中插入元素时,它会自动根据排序规则将元素放置在合适的位置。

对于找不到最后插入的元素的情况,我们可以通过以下步骤来解决:

  1. 确保使用的排序规则是正确的:Set默认使用std::less作为排序规则,即按照元素的升序进行排序。如果你希望按照降序排序,可以使用std::greater作为排序规则。
  2. 确保插入元素时没有重复:Set中不允许存在重复的元素,如果插入的元素已经存在于Set中,插入操作将会被忽略。因此,如果你插入了重复的元素,可能导致无法找到最后插入的元素。
  3. 使用迭代器获取最后插入的元素:Set提供了迭代器来访问其中的元素。你可以使用rbegin()函数获取一个反向迭代器,然后通过解引用操作符*来获取最后插入的元素。

下面是一个示例代码,演示了如何使用Set并找到最后插入的元素:

代码语言:cpp
复制
#include <iostream>
#include <set>

int main() {
    std::set<int> mySet;

    // 向Set中插入元素
    mySet.insert(10);
    mySet.insert(20);
    mySet.insert(30);

    // 获取最后插入的元素
    std::set<int>::reverse_iterator rit = mySet.rbegin();
    int lastInsertedElement = *rit;

    std::cout << "最后插入的元素是:" << lastInsertedElement << std::endl;

    return 0;
}

在这个示例中,我们首先创建了一个Set,并插入了三个元素。然后,我们使用rbegin()函数获取一个反向迭代器,通过解引用操作符*获取最后插入的元素,并将其打印输出。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++STL 容器 - set 集合容器 ② ( set 集合容器常用 api 简介 | 使用迭代器进行正向迭代与反向迭代 | 集合容器插入元素 | 插入单个元素 | 插入多个元素 )

: 返回一个迭代器 , 指向集合尾部 , 该尾部指的是 超出 尾元素 位置 , 不是最后一个元素 , 是最后一个元素后面的位置 , 无法获取值 ; iterator end(); const_iterator...end() const; 获取指向尾元素反向迭代器 : 该函数返回一个反向迭代器 , 指向集合容器最后一个元素 ; 如果集合容器为空 , 则此操作未定义 ; 反向迭代器从集合尾部向头部移动 ;...二、set 集合容器插入元素 1、插入单个元素 - insert 函数 在 C++ 标准模板库 ( STL , Standared Template Library ) 中 , set 容器是一个有序集合..., 其中包含唯一元素 ; 调用 set 容器 insert 函数用于向集合中插入元素 , 插入元素时会自动排序 ; set#insert 函数原型 : void insert (const value_type...- insert 函数 调用 set 容器 insert 函数 , 传入 2 个迭代器对象 , 可以将另外一个容器指定范围元素插入set 集合容器中 , 插入多个元素会在 set 容器中自动排序

35810

C++(STL):13--- list插入和访问元素

list 模板类中,与“添加或插入元素”相关成员方法有如下几个: push_front():向 list 容器首个元素前添加新元素; push_back():向 list 容器最后一个元素后添加新元素...; emplace_front():在容器首个元素前直接生成新元素; emplace_back():在容器最后一个元素后直接生成新元素; emplace():在容器指定位置直接生成新元素; insert...C++ 11 新添加成员函数,其功能是 insert() 相同,即在指定位置直接生成一个元素。...7个元素 mylist2:1 10 20 30 3 4 2 不同于之前学过 STL 容器,访问 list 容器中存储元素方式很有限,即要么使用 front() 和 back() 成员函数,要么使用...通过 front() 和 back() 成员函数,可以分别获得 list 容器中第一个元素最后一个元素引用形式。

2K20

C++STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

#find 函数 一、查找元素 - set#find 函数 1、函数原型 简介 在 C++ 语言 STL 标准模板库 , std::set 集合容器 是一个存储唯一元素容器 , 该容器底层使用 红黑树...数据结构 实现 ; std::set 容器是有序 , 存储元素时 会自动按指定规则进行排序 ; std::set 集合容器类 提供了一个 find 成员函数 , 用于查找 集合容器中 指定值元素..., 该 迭代器指向找到元素 ; 没有找到元素 : 如果在 std::set 集合容器中 , 没有找到指定元素 , 则返回 指向集合末尾迭代器 , 即 std::set::end() 迭代器 , 该迭代器不指向任何元素..., 指向最后一个元素后一个位置 ; 2、代码示例 - set#find 函数 在下面的代码示例中 , 首先 , 创建了一个包含整数 1 到 5 std::set 集合容器 , // 初始化...3); 最后 , 如果找到 整数 3 , 迭代器指向找到元素 , 如果没有找到元素 , 迭代器指向末尾位置 ; 可以根据判断 返回 迭代器是否等于 mySet.end() 值确定 , 如果等于该

29410

C++ STLset基本操作

(2)set迭代器都是常量迭代器,不能用来修改所指向元素,而map迭代器是可以修改所指向元素。...2、set没有重载[]运算符,而map中重载了,因为直接使用[]改变元素值会打乱原本正确顺序,要改变元素值必须先删除旧元素,则插入元素 3、构造类型不一样,如同样实值为int类型分别为set<int...,但不一定能插入成功 23 //iterator insert(&pos, value) 24 //3,将迭代区间[&first, &last)内所有的元素插入set容器 25...); 29 print(set_int); 30 31 //元素删除 32 //1,size_type erase(value) 移除set容器内元素值为value所有元素,返回移除元素个数...//元素查找 40 //count(value)返回set对象内元素值为value元素个数 41 //iterator find(value)返回value所在位置,找不到value

2.8K50

C++STL 容器 - set 集合容器 ⑥ ( pair 对组简介 | pair 对组元素访问 | set 集合容器 insert 插入结果类型 - pair 对组 )

- pair 对组 1、std::set#insert 函数原型分析 2、代码示例 - std::set#insert 函数插入元素结果分析 一、pair 对组 1、pair 对组 简介 在 C++...语言 标准模板库 ( STL , Standard Template Library ) 中 , std::set 集合容器 中 包含一组唯一元素 , 并且元素在容器中是自动排序 ; 默认情况下,std...; std::pair 是 C++ 语言 标准模板库 中一个模板类 , 该类主要作用是 将两个 不同类型 或 相同类型 对象 组合成一个 对组 ; 该 对组 对象 可以作为一个单独元素进行存储和操作...二、set 集合容器 insert 插入结果类型 - pair 对组 1、std::set#insert 函数原型分析 调用 set 集合容器 insert 函数 , 向 set 容器中插入元素 ,...调用 std::set#insert 函数 , 向该 set 容器中插入元素 , 返回一个 pair 类型对组 ; 该对组第一个值是迭代器 , 迭代器类型是 set

13410

C++STL 容器 - set 集合容器 ③ ( set 集合容器常用 api 简介 | 删除元素 | 删除指定值元素 | 删除指定迭代器位置元素 | 删除指定迭代器范围元素 )

文章目录 一、删除元素 1、删除指定值元素 - erase 函数 2、删除指定迭代器位置元素 - erase 函数 3、删除指定迭代器范围元素 - erase 函数 4、删除集合中所有元素 -...clear 函数 一、删除元素 1、删除指定值元素 - erase 函数 在 C++ 语言 STL 标准模板库 中 , set 集合容器 是一个有序集合 , 存储元素值都是唯一 , 不重复...k); 参数解析 : key_type 是 set元素类型 ; k 是要删除元素键 ; 返回值解析 : 返回值是一个 size_type , 表示被删除元素数量 ; 在 set...5 , 9 两个元素 ; 5 9 Press any key to continue . . . 2、删除指定迭代器位置元素 - erase 函数 set#erase 函数 还可以传入一个 指向指定元素位置...; 返回值解析 : 该函数返回值是一个迭代器 , 指向被删除元素之后下一个元素 ; 使用示例 : 在下面的示例中 , 删除了集合容器中第二个元素 ; // set 集合容器 // 初始化列表中顺序会自动排序

26410

C++STL 容器 - set 集合容器 ⑧ ( 查找大于等于指定值元素 - set#lower_bound 函数 | 查找小于等于指定值元素 - set#upper_bound函数 )

三、查找指定键值范围 - set#equal_range 函数 1、函数原型 2、代码示例 一、查找大于等于指定值元素 - set#lower_bound 函数 1、函数原型 在 C++ 语言中...标准模板库 ( STL , Standard Template Library ) 中 std::set 集合容器 类提供了一个 lower_bound 成员函数 ; 该 lower_bound 函数返回一个迭代器对象..., 该 迭代器对象 指向在 set 有序集合中 第一个 大于等于 给定键值元素 , 继续将迭代器 自增 , 即可访问 set 集合容器中 大于等于指定元素后续元素 ; 如果集合中不存在这样元素...二、查找小于等于指定值元素 - set#upper_bound函数 1、函数原型 在 C++ 语言中 标准模板库 ( STL , Standard Template Library ) 中 std...三、查找指定键值范围 - set#equal_range 函数 1、函数原型 在 C++ 语言中 标准模板库 ( STL , Standard Template Library ) 中 std::set

20210

C++STL 容器 - map 关联容器 ② ( map 容器常用 api 操作 | 容器插入元素操作 - map#insert 函数 | 插入 修改 元素操作 - operator[] )

三、代码示例 - map 容器插入 / 更新元素 1、代码示例 2、执行结果 一、map 容器插入元素操作 - map#insert 函数 1、函数原型简介 在 C++ 语言 标准模板库 ( STL...pair , 也是一个 pair 对组对象 ; 返回值对组 第一个值是 iterator 迭代器 , 指向已经插入 键值对 元素 ; 返回值对组 第二个值是...在上面的章节中提到 , 调用 map#insert 函数 向 map 容器中插入 键值对元素 , 需要 创建一个 pair 键值对对象 作为 参数 ; 在 C++ 语言中..., 这种插入元素方式有个弊端 , 就是 如果 键 Key 已经存在 , 则会出现插入失败情况 ; 这里介绍一种新插入方式 , 使用 数组下标 方式进行插入 , 下面的这种插入方式 , 如果键...“Tom” 不存在 , 则正常插入元素 , 如果该键存在 , 则更新元素 Value 值 ; // 创建一个空 map 容器,键为 string 类型,值为 int 类型 map<string

11810

C++STL 容器 - STL 容器值语意 ( 容器存储任意类型元素原理 | STL 容器元素可拷贝原理 | STL 容器元素类型需要满足要求 | 自定义可存放入 STL 容器元素类 )

一、STL 容器 值 ( Value ) 语意 1、STL 容器存储任意类型元素原理 C++ 语言中 STL 容器 , 可以存储任何类型元素 , 是因为 STL 容器 使用了 C++ 模板技术进行实现...; 2、STL 容器元素可拷贝原理 STL 容器 定义时 , 所有的 STL 容器 相关操作 , 如 插入 / 删除 / 排序 / 修改 , 都是 基于 值 Value 语意 , 不是 基于 引用...Reference 语意 ; 比如 : 向 STL 容器中 插入元素时 , 插入都是实际 值 Value 语意 , 不是 引用 Reference 语意 ; 如果 基于 引用 或者 指针 操作...容器元素类型需要满足要求 STL 容器元素类型需要满足要求 : 提供 无参 / 有参 构造函数 : 保证可以创建元素对象 , 并存放到容器中 ; 提供 拷贝构造函数 : STL 容器元素是可拷贝...容器都可以使用 迭代器 进行遍历 ; 调用 begin() 函数 , 获取 指向 首元素 迭代器 ; 调用 end() 函数 , 获取 末尾迭代器 , 该迭代器 指向 最后一个元素后面位置 ; 除了

8610

C++STL 容器 - multimap 容器 ( multimap 容器简介 | multimap 容器常用操作 api - 插入 删除 修改 元素 )

"iostream" using namespace std; #include "map" int main() { multimap myMap; // 插入元素...二、multimap 容器常用操作 api 1、插入元素 multimap 容器插入元素 只能使用 insert 函数插入 , 不能使用 数组下标 方式 插入元素 ; 使用下面的 insert 函数插入元素..., 可以插入 键值相同 元素 ; // 插入单个元素,使用 pair 类型 iterator insert(const value_type& value); 代码示例 : multimap..., 返回被删除元素数量 , 对于 multimap,可能 删除多个具有相同键元素一个 ; size_type erase(const key_type& key); 删除 指定迭代器位置 元素...: 通过迭代器删除单个元素,返回指向下一个元素迭代器 ; iterator erase(const_iterator position); 删除 指定迭代器范围 元素 : 删除一个范围内元素,返回指向下一个元素迭代器

13410

C++STL 容器 - set 集合容器 ① ( set 集合容器简介 | set 集合容器操作时间复杂度 | set 集合容器常用操作 )

一、set 集合容器 1、set 集合容器简介 C++ 语言中 STL 容器中 set 容器 , 是 " 集合容器 " , 容器中 每个元素 是 " 唯一 " , 并且 集合容器 中元素 是按照一定顺序进行排列...; 向 set 集合容器 中 插入元素时 , 都会先验证集合中是否已经存在该元素 , 然后再根据排序规则 , 插入到指定位置 ; set 集合容器 不支持 将 元素插入到指定位置 ; set 集合容器...set元素只能出现一次 , multiset 中元素可以出现多次 ; set 集合容器 中元素 不能直接修改 , 只能 先删除 原来元素 , 然后插入元素 ; 2、set 集合容器操作时间复杂度...上述时间复杂度中 n 指的是 红黑树中 元素节点个数 ; 与 红黑树 进行对比 , 线性表 中 如果进行 插入 / 删除 操作 , 其时间复杂度是 O(n) , 显然 红黑树 / set 集合容器... 插入 / 删除 操作 性能更高 ; 3、set 集合容器常用操作 set 集合容器常用操作 : 插入元素 : 调用 insert 函数 可以向 set 集合容器中插入元素 , 如果元素已存在 ,

16610

如何优雅传递 stl 容器作为函数参数来实现元素插入和遍历?

recv_first、recv_last、recv_cnt 分别表示消息接收首次时间、最后时间以及重复接收次数。...别着急,真正难点在于从数据库恢复数据。首先直接使用迭代器是不行了,因为我们现在要往容器里插入元素,迭代器只能遍历元素,一点帮助也没有。...代替 "it->";插入元素时需要使用 “*it = std::make_pair (sm.msgid, sm)” 代替 “*it = sm”。做完上述修改,我发现程序仍然编译不通过。...~ 特别需要说明是,最有技术含量缺失发生在 line 37 一个引用符,如果没有加入这个,虽然可以通过编译,但在运行过程中,inserter 不能向 map 中插入元素,会导致从数据库读取完成后得到空...结语 其实本文讲解了一种通用通过 iterator 读取容器、通过 inserter 插入容器元素方法,这种方式较之直接传递容器本身“优雅”不少,虽然不能实现 100% 无缝切换容器,但是也提供了极大灵活性

3.6K20

C++】 使用红黑树模拟实现STLmap与set

前言 前面的文章我们学习了红黑树,也提到了C++STLmap和set底层其实就是用红黑树来实现(而map和set使用我们前面也学过了)。...STL源码中map和set实现 那在正式实现之前,我们先一起来看一下STL(SGI版本)中map和set源码,大致了解一下库里面是怎么实现。...然后写一下set: 3.3 insert封装 先来看map: 其实还是复用红黑树Insert,当然之前我们学过map和set使用,它们insert返回值其实是一个pair嘛(当然只是插入一个元素那个版本...返回中序遍历最后一个结点下一个: 那最后一个结点后面就没有元素了啊,所以我们直接用空构造一个迭代器返回就行了 那const版本begin和end我们也直接写一下: 另外这里稍微有点挑战就是+...: 当插入成功时候,pairfirst为指向新插入元素迭代器,second为true,当插入失败时候(其实就是插入键已经存在了),那它first为容器中已存在那个相同等效键元素迭代器

13110

【技术创作101训练营】不学STL 怎么做算法题?

,想向到场同学,解释一下 为什么 咱们要学习使用 C++ 并且 要学会 STL 使用。...,会按照从小到大进行排序 set集合中没有重复元素 set元素都是排好序 头文件引入 #include 增加元素 insert()--在集合中插入元素 循环遍历 iterator begin...()--指向第一个元素位置 iterator end()--指向最后一个元素下一个位置 for(set::iterator it; it !...iterator end()--指向最后一个元素下一个位置 查找函数 find()--查找值对应位置 同setfind,如果找不到则返回最后一个元素下一个位置 删除函数 erase()-...中第一个元素引用 获取最后一个元素 back():返回 queue 中最后一个元素引用 C++ 引用 & 与传值区别 c++ & 被称为引用符号(函数参数列表使用) c语言 & 被称为取地址运算符

1K00

建议收藏 哭着喊着 从C语言转向C++刷算法

5.判断函数 bool empty() const:判断向量是否为空,若为空,则向量中无元素 6.大小函数 int size() const:返回向量中元素个数 set set是集合,set不存在重复元素...,会按照从小到大进行排序 set集合中没有重复元素 set元素都是排好序 头文件引入 #include 增加元素 insert()--在集合中插入元素 循环遍历 iterator begin...()--指向第一个元素位置 iterator end()--指向最后一个元素下一个位置 for(set::iterator it; it !...iterator end()--指向最后一个元素下一个位置 查找函数 find()--查找值对应位置 **同setfind,如果找不到则返回最后一个元素下一个位置** 删除函数 erase...中第一个元素引用 获取最后一个元素 back():返回 queue 中最后一个元素引用 C++ 引用 & 与传值区别 c++ & 被称为引用符号(函数参数列表使用) c语言 & 被称为取地址运算符

1.3K20

C++拾趣——STL容器插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——插入

遍历分为从头部和尾部两个方向遍历;         查找操作只对比set和map系列容器。因为其他容器查找都需要遍历进行对比,性能远不及这两类容器。 插入 头部插入 元素个数>15000 ?...当元素个数比较少(大概小于256)时,有序关联容器性能比无序(unordered)关联容器要高(除了unordered_set)。 中间插入 元素个数>15000 ?...forward_list、list和deque在不同元素个数时表现都很优异。         set容器是所有关联容器中性能最好。 尾部插入 元素个数>15000 ?...结论:         在尾部插入时,vector性能是最好。其他两个场景下,vector性能都是最差。但是在中间插入场景,容器元素个数小于256时,vector还是最优。...在关联容器中,只有在头部插入场景下unordered_set性能极其优异。         当元素个数较多时,set性能要优于map。

1.7K11

C++STL 容器 - deque 双端数组容器 ( deque 容器与 vector 容器区别 | 容器头部插入 删除元素 | 查询元素索引位置 | algorithm#find 函数 )

尾部 插入 和 移除元素 ; deque 可以在 头部 和 尾部 插入 和 移除元素 ; deque 容器 与 vector 容器 操作 , 绝大部分都是相同 , 本篇博客中着重讲解 deque...( 仅展示与 vector 容器不同操作 ) 1、deque 容器头部插入元素 - push_front 函数 调用 std::deque 容器 push_front() 函数 可以在容器头部插入一个元素...; 函数原型如下 : 该函数接受一个元素作为参数 , 并将其插入到容器头部 // 接收一个常量引用参数 , 插入常量元素 void push_front(const value_type& val)...deque 类型 STL 容器 void printV(deque& deq) { cout << "deque 容器中元素 : "; for (int i =...STL 容器 void printD(deque& deq) { cout << "deque 容器中元素 : "; for (int i = 0; i < deq.size

11910

C++拾趣——STL容器插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入

遍历分为从头部和尾部两个方向遍历;         查找操作只对比set和map系列容器。因为其他容器查找都需要遍历进行对比,性能远不及这两类容器。 插入 头部插入 元素个数>15000 ?...insert_begin_16384_highest         往vector容器头部插入数据,所需要时间会随着容器元素增多而变得很慢。        ...unordered_set小容器时表现不是很突出,但是随着元素增多,性能还是可以。        ...对比结果:         vector表现最好。 结论:         vector容器在头部、中间插入时性能随着元素个数增多,性能变非常糟糕。...但是在尾部插入时,性能不太好。         文中图例可从以下地址获取:https://github.com/f304646673/stl_perf/tree/master/linux

82220

C++STL 容器 - list 双向链表容器 ③ ( list 常用 api 简介 | 中间位置 插入 删除 元素 | insert 函数 | clear 函数 | erase 函数 )

一、list 双向链表容器 中间位置 插入 元素 1、在指定位置插入 1 个元素 - insert 函数 下面的 std::list#insert 函数原型作用是 在 指定 迭代器位置 position...{ // 获取迭代器起始位置 list::iterator it = lst.begin(); cout << "list 容器内容 : "; // 循环判定, 如果没有迭代到最后一个元素后一个位置...{ // 获取迭代器起始位置 list::iterator it = lst.begin(); cout << "list 容器内容 : "; // 循环判定, 如果没有迭代到最后一个元素后一个位置...此外 , 还可以插入 其它类型 容器元素 , 下面的示例中 , 在 list 双向链表容器 2 号索引位置 , 插入了 vector 动态数组 中所有元素 ; 代码示例 : #include "...最后一个元素 ; // list 双向链表容器 使用初始化列表构造 list lstInt{ 1, 2, 3, 4, 5 }; // 删除容器中指定迭代器范围元素 lstInt.erase

15910
领券