小编ral*_*aul的帖子

如何实现std :: unordered_map

c ++ unordered_map碰撞处理,调整大小和重新散列

这是我之前提出的一个问题,我看到我对unordered_map的实现方式感到很困惑.我相信很多其他人都会和我分享这种困惑.基于我所知道的信息而不阅读标准:

每个unordered_map实现都将链表存储到存储桶数组中的外部节点...不,这对于实现最常见用途的哈希映射来说并不是最有效的方法.不幸的是,unordered_map规范中的一个小"疏忽"都需要这种行为.所需的行为是元素的迭代器在插入或删除其他元素时必须保持有效

我希望有人可以解释实现以及它如何与c ++标准定义(在性能要求方面)相对应,以及它是否真的不是实现哈希映射数据结构的最有效方法如何改进它?

c++ unordered-map hashmap c++11

48
推荐指数
1
解决办法
3万
查看次数

为什么知道是否需要某些内存是不可判定的?

我正在使用Mozilla的Javascript教程,我来了解这条信息.

高级语言嵌入了一个名为"垃圾收集器"的软件,其工作是跟踪内存分配和使用,以便找到不再需要分配内存的时间,在这种情况下,它将自动释放它.该过程是近似的,因为知道是否需要某些存储器的一般问题是不可判定的(不能通过算法解决).

我熟悉不可判断性和垃圾收集器的概念,但我似乎无法理解为什么这是一个不可判定的问题?

garbage-collection memory-management decidable

16
推荐指数
2
解决办法
603
查看次数

使用异步数据提取的服务器端呈现

我们正在使用react/react-router/redux构建我们的网站

我们希望服务器端渲染我们的页面,这些页面应该由我们的数据源中的数据填充.这个事务必须是异步的,不幸的是因为我们想要服务器端渲染,我们不能使用"componentDidMount"函数.

这里的服务器端渲染部分的redux教程页面中,建议:

如果使用React Router之类的东西,您可能还希望将数据提取依赖关系表示为路由处理程序组件上的静态fetchData()方法.它们可能会返回异步操作,因此handleRender函数可以匹配到路由处理程序组件类的路由,为每个类调度fetchData()结果,并且只在Promises解析后才进行渲染.这样,不同路由所需的特定API调用与路由处理程序组件定义共同定位.您还可以在客户端使用相同的技术,以防止路由器切换页面,直到其数据已加载.

这是我们目前处理数据提取的方式.我个人不喜欢这种方法,它看起来很笨拙,而且它太过耦合到路由库.有没有更好的方法 - 希望使用标准的react/router/redux组件?

javascript asynchronous reactjs react-router redux

11
推荐指数
1
解决办法
2850
查看次数

c ++ unordered_map碰撞处理,调整大小和重新散列

我还没有读过C++标准,但这就是我觉得c ++的unordered_map假设可行的方式.

  • 在堆中分配内存块.
  • 对于每个put请求,散列对象并将其映射到此内存中的空间
  • 在此过程中通过链接或开放寻址来处理碰撞处理.

我很惊讶我找不到有关unordered_map如何处理内存的信息.是否存在unordered_map分配的特定初始内存大小.如果我们说我们分配了50个内存并且我们最终插入5000整数会怎么样?

这将是很多碰撞,所以我认为应该有一种像重新散列和重新调整大小的算法,以在达到一定程度的碰撞阈值后减少碰撞次数.由于它们是作为成员函数显式提供给类的,因此我假设它们也在内部使用.有这样的机制吗?

c++ hash unordered-map hashmap c++11

10
推荐指数
1
解决办法
4956
查看次数

如何迭代std :: set会返回排序结果

容器std :: set(或std :: map)是STL提供的数据结构.在几乎所有编译器中,它都被实现为R&B树,具有保证的log(n)插入,查找和删除时间.

https://en.wikipedia.org/wiki/Red%E2%80%93black_tree

在红色和黑色树中,元素基于存储元素的"较少"运算符进行排序.所以基本上如果根是N + 1,N将在左子树上,而N + 2将在右子树上,这个排序将由less运算符决定.

我的问题是在执行以下代码时:

 set<unsigned long>::iterator it;
 for (it = myset.begin(); it != myset.end(); it++) {
     cout << *it;
 }
Run Code Online (Sandbox Code Playgroud)

元素以排序顺序返回.考虑到底层数据结构是红色和黑色树这一事实,这怎么可能呢?是否存储了单独的链表以便能够从最左边的子树迭代到最右边的子树?如果不是这个使用R&B树实现的机制是什么?

c++ iteration stl c++11

8
推荐指数
1
解决办法
280
查看次数

弹性搜索处理丢失的索引

我想知道是否有一种方法可以指定我不介意的弹性搜索或我的搜索查询中的错误索引.换句话说,我有一个查询,它试图查询7个不同的索引,但其中一个可能会丢失,具体取决于具体情况.我想知道的是,如果有办法说,忘记破碎的那个并得到其他6个指数的结果?

    SearchRequestBuilder builder = elasticsearchClient.getClient().prepareSearch(indices)
            .setQuery(Query.buildQueryFrom(term1, term2))
            .addAggregation(AggregationBuilders.terms('term')
                                        .field('field')
                                        .shardSize(shardSize)
                                        .size(size)
                                        .minDocCount(minCount));
Run Code Online (Sandbox Code Playgroud)

作为示例查询,您可以找到上面的查询.

java database elasticsearch

7
推荐指数
2
解决办法
2201
查看次数

为什么后增量需要复制而预增量不需要

我知道这个问题已经讨论了好几次了,但我找不到一个解释为什么在后增量操作时需要复制的帖子.

引用stackoverflow回复:

int j = i++; // j will contain i, i will be incremented.
int j = ++i; // i will be incremented, and j will contain i+1.
Run Code Online (Sandbox Code Playgroud)

当考虑后/前增量的定义时,这是完全有意义的.很多时候,在比较前/后增量的性能时,可以说后增量需要复制,增加它并返回副本,而预增量只增加值而不创建副本.

虽然已经在数十篇帖子中对性能进行了比较,但我真的找不到为什么在后增量的情况下必须制作副本的任何解释.为什么不返回旧值,然后将变量的值增加1(或者操作符重载方式),而不是创建新对象并返回该对象.

c++ increment pre-increment post-increment

7
推荐指数
2
解决办法
1372
查看次数

在sinon中存储嵌套函数调用

有三个单独的问题与此类似,但它们都不像我的情况.

所以我基本上有一个函数,它将函数作为参数

var myfunc ( func_outer ) {
    return func_outer().func_inner();
}
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我希望能够创建myfunc2的存根.基本上我需要能够存根作为嵌套存根的存根.我目前使用这种手动存根,但如果有办法,我宁愿使用sinon存根.

const func_outer = () => {
    return {
       func_inner: () => {return mockResponse;}
    }
};
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这种情况.有没有简单的方法来解决这个问题?

javascript unit-testing mocking stubbing sinon

7
推荐指数
1
解决办法
3746
查看次数

将构造参数传递给 redux 中间件

我很好奇是否有办法将参数传递给中间件而不从状态中检索它。我想要做的是传递我们正在使用的通用函数,该函数确定用户是否经过身份验证。因此,与其从代码重复的状态中检索身份验证信息,不如将isAuthenticated函数传递给中间件。

我不认为这是在applyMiddleware框架中本地实现的,但也许有人可以解决这种情况。

middleware reactjs redux

6
推荐指数
1
解决办法
2013
查看次数

Node.js 异步调用处理和多核扩展

众所周知,node.js 内部处理异步调用,程序员永远不需要关心后台发生了什么。据我所知,即使每个人都说 node.js 只是单线程,但内部 v8/libuv 库正在产生线程来处理程序的异步片段的执行。

我的问题是,如果产生这些线程,它们是否会扩展多核架构?我的意思是,如果我有一个 4 核的 CPU,并且我的主节点线程在其中一个 CPU 上运行,那么这些内部产生的线程是否会扩展到其他三个 CPU 而不会保留在同一个 CPU 上。从理论上讲,它们应该可以扩展,但由于每个人都说 node.js 开箱即用不使用多核,我认为这值得一问。

multithreading asynchronous multicore event-loop node.js

5
推荐指数
1
解决办法
682
查看次数