Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何实现std::map的排序?

如何实现std::map的排序?
EN

Stack Overflow用户
提问于 2014-12-02 19:55:20
回答 3查看 296关注 0票数 3

我们可以从几个源中看到std::map是使用红黑树实现的。我的理解是,这些类型的数据结构不以任何特定的顺序保存它们的元素,而只是维护BST属性和高度平衡要求。

那么,如何实现映射::begin是常数时间,并且我们能够迭代一个有序序列?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-02 20:21:27

std::map在内部维护BST的前提出发(这不是标准严格要求的,但大多数库可能会这样做,就像一棵红黑树)。

在BST中,要找到最小的元素,您只需跟随左边的分支,直到到达叶子,即O(log(N))。但是,如果您想在恒定时间内交付"begin()“迭代器,那么只在内部跟踪最小元素是非常简单的。每次插入导致最小元素发生更改时,您都会更新它,仅此而已。当然,这是内存开销,但这是一种权衡。

可能还有其他方法来选择最小的元素(比如故意保持根节点的不平衡)。不管怎样,这并不难。

要迭代“有序”序列,只需对树执行有序遍历即可。从最左边的叶节点开始,你走(上),(右),(上,上),(右),.就这样..。这是一组简单的规则,很容易实现,就像我不久前写的参见简单BST顺序迭代器的快速实现。一样。当您进行有序遍历时,您将以正确的顺序访问每个节点,从最小到最大。换句话说,它只是给你“数组”排序的错觉,但在现实中,是遍历使它看起来像是排序的。

票数 3
EN

Stack Overflow用户

发布于 2014-12-02 20:00:16

红黑树的平衡属性允许您在树中的任何位置插入一个节点,代价为O(log )。对于典型的std::map实现,容器将保持树的排序,每当插入新节点时,将其插入到正确的位置以保持树的排序,然后重新平衡树以维护红黑属性。

所以不,红黑树不是天生分类的。

票数 2
EN

Stack Overflow用户

发布于 2014-12-02 20:09:03

RB树是二元搜索树。二进制搜索树不一定以任何特定的顺序存储它们的元素,但是始终可以得到无序遍历。我不确定map::begin如何保证恒定的时间,我假设这包括始终记住最小元素的路径(通常是O(log(N)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27263354

复制
相关文章
JAVA map排序实现
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。
全栈程序员站长
2022/09/14
6050
Rust的std::iter::map()方法
map()通过其参数将一个迭代器转换为另一个迭代器. 它在原来的迭代器的基础上,产生一个新的迭代器,它在原始迭代器的每个元素上调用这个闭包。
灯珑LoGin
2023/10/18
4330
Rust的std::iter::map()方法
高效的使用stl::map和std::set
if (map.find(X) == map::end()) // 需要find一次
一见
2018/08/07
2.9K0
map排序,根据key给map排序,根据value给map排序
1-------Franch 2-------Canada 3-------China
IT云清
2019/01/22
1.6K0
Map排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。 按键排序(sort by key) jdk内置的J
xiangzhihong
2018/02/01
7560
Map排序
std库sort排序函数的crash
Qt4 to Qt5 - Obsolete Members for <QtAlgorithms>
mariolu
2023/05/26
5280
如何优雅的使用 std::variant 与 std::optional
std::variant与std::optional是c++17加入的新容器,variant主要是为了提供更安全的union, 而optional除了存取T类型本身外, 还提供了一个额外的表达optional是否被设置值的状态.
fangfang
2021/10/29
3.8K0
JS map排序
1.key排序 var map=new Map(); map.set("b","8"); map.set("c","10"); map.set("a","1"); map.set("d","7"); map.set("e","3"); var arrayObj=Array.from(map); arrayObj.sort(function(a,b){return a[0].localeCompare(b[0])}) for (var [key, value] of arrayObj) { console.
smallmayi
2022/05/12
9.3K0
Map集合排序
public class MapOrder { public static void main(String[] args) { HashMap<String,Integer> hashMap = new HashMap<String,Integer>(); hashMap.put("d",11); hashMap.put("k",5); hashMap.put("l",16); hashMap.put("p",7);
会说话的丶猫
2020/09/24
8750
map容器排序
#include<iostream> using namespace std; #include<map> class person { public: person(int id,int s,int m):id(id),salary(s),moneyBag(m){} int id; //员工编号 int salary; //工资 int moneyBag; //分红 }; //自定义排序规则 class compare { public: bool operator()(int v1,
大忽悠爱学习
2021/03/02
3020
map容器排序
Map元素排序
开发中会遇到对Map元素排序的问题,下面介绍下如何根据key、value排序. key排序 使用TreeMap的Comparator比较 TreeMap默认是升序的,如果需要自定义排序规则,可以使用Comparator: Map<String, Integer> map = new TreeMap<String, Integer>(new Comparator<String>() { // 按照key排序 @Override publi
LiosWong
2019/11/06
6090
C++11:基于std::unordered_map和共享锁构建线程安全的map
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52072061
10km
2019/05/25
9K0
Scala的map实现key和value排序及各种排序比较等知识讨论
问题导读 1.map能否直接排序? 2.如何转换,才能排序? 3.排序结果可以存储在哪两个集合中? 4._*如何使用? 5.排序函数中,哪个可以进行升序和降序排列? 6.他们的排序性能如何?
用户1410343
2018/03/26
3.7K0
Scala的map实现key和value排序及各种排序比较等知识讨论
java map的key排序吗
java为数据结构中的映射定义了一个接口java.util.Map,他实现了四个类,分别是:HashMap,HashTable,LinkedHashMapTreeMap,Map不允许键重复,但允许值重复
Java架构师必看
2021/12/21
1.4K0
简析Map及Map集合的遍历解析、排序
其实Android对Java基础的要求并不高,虽然Android是基于Java的,但是Android有更多它自己的东西。
yechaoa
2022/06/10
8890
简析Map及Map集合的遍历解析、排序
Swisstable:C++中比std::unordered_map更快的hash表
hash表的实现,实在是太经典太没什么新意了,但是这个数据结构又是用得太多太基础的组件了,如果有人能够把hashtable做的更快,实在也没理由拒绝。Google实现的这个hash表的性能,请看下图:
ahfu_zhang
2022/06/23
2K0
将map按照值排序
值里面存放的是一个对象需要根据id排序 将相同的人放在一起 List<Map.Entry<String, CorrectRate>> list = new LinkedList<Map.Entry<String, CorrectRate>>(correctRateOm.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, CorrectRate>>() {
崔笑颜
2020/06/08
9300
LUA对Map进行排序
Lua中最常见的数据结构就是Table, 用Table表示Map很容易, 但早期Lua没有提供一个针对Map数据结构的排序方法,下面用Moonscript实现了一个Map型数据结构排序函数方法。
糖果
2019/11/20
3.5K0
对map集合进行排序
今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序。
java思维导图
2018/11/30
1.8K0
对map集合进行排序
如何实现归并排序?
划分步骤很简单:将当前数组分成两半(如果N是偶数,则将其完全平等,或者如果N是奇数,则一边稍大于一个元素),然后递归地对这两半进行排序。
行百里er
2020/12/02
5570
如何实现归并排序?

相似问题

std::map的排序

26

std::map -如何更改键排序?

41

排序std::map<string,double>

43

对std::map进行排序

30

STL std::map动态排序

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文