小编LiK*_*Kao的帖子

空间数据的数据结构

我正在寻找一个良好的功能数据结构来存储空间(点)数据.数据结构应允许对已存在的点进行简单的epsilon查询.我还需要经常修改数据.这意味着点可以移动,并且应该能够在数据结构中更新.这可以使用普通的删除/添加来处理,但真正的移动可能会更快.

现在我正在考虑使用quad/oct-trees(或更高版本),因为移动部分应该很容易.然而,就平衡而言,已知四叉树更糟糕.KD-Trees可能是另一种选择,但更新似乎非常讨厌.我能找到的大多数空间数据结构实现只是程序性的,我使用的是函数式语言.

ocaml functional-programming data-structures

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

为什么我不能用std :: unordered_map替换std :: map

这个问题可能有点粗略,因为我家里没有可用的代码,但是我知道这个东西会在整个周末给我带来麻烦.

当我试图更新一些代码,C++ 11我开始取代一些std::mapstd::unordered_map.该代码仅用于std::map::find()访问地图中的特定元素,因此我认为替换应该很容易.返回的迭代器存储在一个auto-typed变量中(auto res = map.find( x )因此输入应该检查正常.但是当res->second.do_stuff()我使用编译器错误访问存储的元素时,告诉我,那struct std::pair<char, B> does not have a member second.现在这让我很困惑,但不幸的是我没有时间进一步调查.

也许这是足够的信息,所以有人可以给我一个关于这个奇怪的编译器错误的提示.或者我的理解是,std::map并且std::unordered_map应该具有相同的界面,除了需要订购的部件,不正确?

编辑:

正如这里所承诺的那样,对问题进行了更多的分析 很可能这会让别人现在更好地帮助我.正如我从评论中的提示中猜到的那样,这并不是由我访问地图中的元素,而是由代码的其他部分引起的.我发现的原因是,我使用了类X中的映射来存储指向类X的其他元素(一种树结构)的指针.然而,这似乎适用std::map但不适用std::unordered_map.以下是一些展示问题的非常简单的代码:

#include <stdint.h>
#include <unordered_map>
#include <map>

class Test {
  std::map<uint32_t, Test> m_map1; // Works
  std::unordered_map<uint32_t, Test> m_map; // gives error: ‘std::pair<_T1, _T2>::second’ has incomplete type
};

int main() {
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

std::map工作std::unordered_map不起作用.任何想法为什么会这样,或者可以采取什么措施让它与一个std::unordered_map …

c++ stl unordered-map c++11

10
推荐指数
2
解决办法
4083
查看次数

适用于SVN用户的Git

我一直是一个非常狂热的git用户.但是我经常注意到经验丰富的SVN用户似乎在使用git时遇到了很多问题.现在我正在寻找资源,让那些习惯长期使用SVN并养成SVN怪癖习惯的人可以使用git.

我知道有git svn速成课程,但这并不能真正提供我需要的信息.虽然这可以轻松地将常见的SVN命令映射到类似的Git命令,但人们倾向于使用更复杂的工作流,这些工作流通常不能仅通过将命令从一个工具映射到另一个工具来轻松映射.

例如,我认识的很多人通常倾向于在不同的目录中保留多个版本的版本化软件,以便能够在修订版之间轻松切换.对我来说,这似乎是所有Git通过轻松处理一个缺憾解决办法git stash,git checkout工作流程.我也注意到使用SVN的人倾向于对分支有不同的看法.而在SVN中,来自分支的所有提交完全属于Git中的那个分支(因为它们涉及该目录),实际上并不存在"来自分支的提交",因为每个分支将包括从当前分支状态可到达的所有提交.

是否有任何教程,映射这些概念,以使强制使用它的SVN用户更容易访问Git?

svn git

9
推荐指数
2
解决办法
2146
查看次数

makecontext()/ swapcontext()函数是否与C++兼容

在unix环境中makecontext()/swapcontext(),函数族有时用于在C中实现协程.但是这些函数直接操作堆栈和执行流程.通常,当从C切换到C++时,这些低级功能完全不同.

所以问题是,如果使用makecontext()和实现协同程序会有任何问题swapcontext().当然,显然必须非常小心,异常永远不会逃脱这样的协同程序,因为堆栈上没有异常处理程序,程序很可能是段错误.但除此之外,C++在内部处理事物的方式makecontext()setcontext()修改执行路径之间是否存在任何不兼容性?

c++ posix coroutine

9
推荐指数
1
解决办法
2156
查看次数

检测析构函数中的活动异常

我有一个类使用RAII进行清理,以防出现问题.这意味着该类包含一个标志,告诉它是否已完成工作,并且如果在调用构造函数时未设置此标志,则它正在执行清理任务并生成日志消息.现在我希望这个类变得更聪明一步,即它应该找出,如果错误发生了,因为工作被贬低(即抛出异常并且析构函数被调用)或者因为有人错过了这个类而且从不实际上完成了工作.这意味着如果异常处于活动状态,我必须在析构函数中找到它.如果找到一个,我会生成一条日志消息,可能会打印异常的内容然后重新抛出它.我猜是这样的.

Foo::~Foo () {
  try { /* do not know what to put here */ }
  catch( const std::exception & ex ) {
     // produce error in log
     throw;
  }
  catch( ... ) {
    // produce some other log message
    throw;
   }
}
Run Code Online (Sandbox Code Playgroud)

但是我不确定这是否会起作用,因为异常在调用析构函数之前已经激活,并且不是来自try块.另外我throw;在析构函数中使用了一个并且在这一点上抛出异常是一个非常糟糕的主意.所以我不会这样做,除非标准明确保证这个案例是这个规则的例外(没有双关语)(我不知道).

这是可能的,或者我应该以其他方式处理这种情况?

c++ destructor exception raii

8
推荐指数
2
解决办法
2304
查看次数

如何在SMPP中正确表示消息类

我目前正在试图找出sms类如何在SMPP中正确表示.但是我现在完全被标准和它的文档混淆了.

在正常的短信我们有

  • Class0:Flash短信,显示在显示屏上
  • Class1:正常的Sms存储在SIM上或设备内部

查看SMPP规范,我首先data_codingsubmit_sm操作中找到参数,该参数用于设置通过MAP发送的DCS.据我所知,如果我们想要显式设置消息类,我们需要将此参数的前四位设置为1,然后指示编码的两位,然后指示消息类的另外两位.所以对于Class1 Sms,我们会设置1111xx01.到目前为止这是正确的吗?

如果我们尝试设置此DCS,但是目前我们还将数据编码设置为"8位数据".看来,有几款手机无法理解这一点.这是在任何地方指定的,我们可以改变它,或者是在发送其他消息类时需要的特殊编码.

当我们尝试使用SMPPv3.4建议的Message类设置方法时,会出现更多混乱.从3.4开始,操作中有一个可选参数submit_sm,称为dest_addr_subunit.根据标准,此参数应设置为0表示未知,1表示MS显示,2表示移动设备等.如果我看一下,与GSM消息类别相比,参数似乎会移动1.Class0编码为1,Class1编码为2,依此类推.这是正确的还是有更复杂的映射背后?

另外,如果我们设置dest_addr_subunit,我们是否仍然必须设置DCS,或者我们可以将此参数保留为默认值吗?

sms gsm network-protocols smpp

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

在postgres中支持什么是事务性的

我正在尝试找出postgres可以在事务内部安全处理的内容,但我在postgres手册中找不到相关信息.到目前为止,我发现了以下内容:

  • UPDATE,INSERT并且DELTE在事务内部完全支持并在事务未完成时回滚
  • DROP TABLE在事务中没有安全处理,并且使用a撤消CREATE TABLE,因此重新创建已删除的表但不重新填充它
  • CREATE TABLE 也不是真正的交易,而是与相应的撤消 DROP TABLE

它是否正确?我也找不到关于ALTER TABLE和处理的任何提示TRUNCATE.这些处理方式在交易中是否安全?不同类型的交易和不同版本的postgres之间的处理有区别吗?

postgresql transactions

6
推荐指数
2
解决办法
3291
查看次数

合并时藏匿

我有一个问题刚刚提出我的同事,我想知道这个问题最好的git工作流程.

假设我们有两个分支A和B.现在我们foo.c在A和B中都改变了一些文件(),所以当我们将B合并到A时,我们得到合并冲突.现在让我们说一些开发人员搞砸了并离开了分支A一个破碎的状态,错误也在foo.c中,但在一个未合并的行中.

我看到了处理这种情况的一些可能性:

  1. 存储挂起的合并,修复A上的问题,提交然后再次应用合并.但是在这一点上,我不确定如何为foo.c所做的更改处理正确的合并策略.破碎的部分可能会影响我所做的一些事情,因此我没有看到解决冲突的明确方法.

  2. 撤消合并,修复A上的问题,然后重做整个合并.但是我可能已经解决了其他冲突,所以这可能会失去很多工作.

  3. 拿--theirs/ - 我们的文件版本,完成合并,修改更改,樱桃选择已经丢失的更改.然而,我会有两次变化.

  4. 其他一些解决方案,我无法想到.

所有这些解决方案让我感到有些不满意.根据我的惯常经验,我可能会选择1,但我绝对不确定.

你会如何处理这种情况?

git git-merge branching-and-merging

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

按键的平均延迟有多大

我目前正在帮助某人进行反应时间实验.对于该实验,测量键盘上的反应时间.对于这个实验,重要的是要知道,由于按键和软件中的处理之间的延迟,可以引入多少错误.

以下是我使用谷歌发现的一些因素:

  • USB总线的最小值为125Hz,最大值为1000Hz(具体取决于设置,请参见此链接).
  • Windows中可能还有一些额外的键盘缓冲区可能会进一步延迟按键,但我不知道其背后的逻辑.

不幸的是,无法控制实验的低级逻辑.该实验用E-Prime编写,该软件通常用于此类实验.然而,提供E-Prime的公司还提供额外的硬件,他们为精确的反应时间做广告.因此他们似乎意识到这种效果(但不知道它有多大).

不幸的是,有必要使用标准键盘,所以我需要提供减少延迟的方法.

hardware keyboard usb low-latency

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

objdump默认情况下反汇编哪个部分

我目前正在构建一个可执行的裸机,它包含一些包含代码的特殊部分.但是,当我这样做时,objdump -d我只获取.text.init.text部分的代码.该联机帮助页objdump仅表示在使用该-d选项时"仅拆解那些预计包含说明的部分" .这些是哪些部分,以及如何objdump解释要解码的部分?我知道我也可以使用该-D选项来获得所有部分的完整解码,但这通常比我需要的要多得多.

linux bare-metal objdump disassembly

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