草庐IT

event-queue

全部标签

c++ - 为什么使用 std::multiset 作为优先级队列比使用 std::priority_queue 更快?

我尝试用std::priority_queue替换std::multiset。但我对速度结果感到失望。算法运行时间增加50%...相应的命令如下:top()=begin();pop()=erase(knn.begin());push()=insert();我对priority_queue的实现速度感到惊讶,我期待不同的结果(对PQ更好)...从概念上讲,多重集被用作优先级队列。为什么优先级队列和多重集有如此不同的性能,即使使用-O2?十个结果的平均值,MSVS2010,WinXP,32位,方法findAllKNN2()(请参见下文)MSNtime[s]1000000.510000008

c++ - 设置priority_queue容器的好处

使用STLpriority_queue,您可以设置底层容器,例如vector。为STLpriority_queue指定容器有哪些优点? 最佳答案 设置底层容器可以分离出两个逻辑上独立的关注点:如何存储构成优先级队列(容器)的实际元素,以及如何组织这些元素以有效地实现优先级队列(priority_queue适配器类)。例如,vector的标准实现不需要在其容量远大于其实际大小时自行缩小。这意味着如果您有一个由vector支持的优先级队列,如果您将大量元素入队然后将所有元素出队,您可能最终会浪费内存,因为vector将保持其旧容量。另一

c++ - std::queue 的基于范围的循环

我试图在我的项目中寻找std::vector的替代品,我发现std::queue就是我要找的为。我有很多使用range-basedloop进行迭代的函数,我正在尽可能地维护它。我尝试在std::queue中编译一个range-basedloop但我得到的只是编译错误error:nomatchingfunctionforcallto'begin(std::queue&)'std::queue不支持范围基循环吗?我确实尝试了Google搜索,但没有找到与此相关的任何主题。更新:我的编译器是GCCv4.7.1-std=c++11已启用这是错误的测试代码:std::queueQ;for(int

c++ - 如何预分配(保留)priority_queue<vector>?

如何使用std::vector类型的容器预分配std::priority_queue?std::priority_queue>pq;pq.c.reserve(1024);不编译,因为底层vector是一个protected成员。是否可以使用priority_queue的构造函数将其包装在预先保留的vector周围? 最佳答案 是的,有一个constructor为了那个原因。您还必须指定一个比较器,这有点乏味:std::vectorcontainer;container.reserve(1024);std::priority_queu

c++ - STL 堆栈和 priority_queue 的插入器

std::vector、std::list和std::deque有std::back_inserter,并且std::set有std::inserter。对于std::stack和std::priority_queue我假设等效的插入器是push()但我不能似乎找不到要调用的正确函数。我的意图是能够将以下函数与正确的插入迭代器一起使用:#include#include#includetemplatevoidfoo(outiteroitr){staticconststd::strings1("abcdefghji");staticconststd::strings2("123456789

c++ - 如何配置 std::priority_queue 以忽略重复项?

如何配置std::priority_queue以忽略重复项?当我添加一个已经包含的键时,这个新键应该被忽略。(在我的例子中,旧的和新的优先级总是完全一样的。)就复杂性而言,它应该不会有什么不同:它会尝试在适当的位置插入,在那里找到现有的,什么也不做。问题是std::priority_queue是否可以通过这种方式配置。 最佳答案 您可以从STL集中实现priority_queue。ImplementingapriorityqueuethatcanbeiteratedoverinC++ 关

c++ - 如何将 std::string 放入 boost::lockfree::queue (或替代方案)?

我正在尝试输入std::string进入boost::lockfree::queues以便我的线程可以使用新数据相互更新。当我尝试使用boost::lockfree::queueupdated_data;时,g++说:Ininstantiationof'classboost::lockfree::queue>':error:staticassertionfailed:(boost::has_trivial_destructor::value)error:staticassertionfailed:(boost::has_trivial_assign::value)我去过showngen

windows - C++11 + SDL2 + Windows : Multithreaded program hangs after any input event

我正在使用C++11、MinGW和WindowsAPI开发屏幕捕获程序。我正在尝试使用SDL2实时观察我的屏幕捕获程序是如何工作的。窗口打开正常,只要我只移动鼠标光标,程序似乎运行良好。但是如果我在窗口中单击它的菜单栏,在窗口外,或者按任意键,SDL窗口就会卡住。我已经为事件设置了一些日志记录以弄清楚发生了什么。除了SDL_WINDOW_FOCUS_GAINED之外,我从未收到任何事件,SDL_TEXTEDITING,和SDL_WINDOWEVENT_SHOWN以该顺序。所有这些都是在开始时收到的。我试图找到有关SDL事件处理的教程,因为这是我对问题根源的最佳猜测。除了基本的事件处理之

c# - WH_MOUSE_LL Hook 不会为注入(inject)的事件(mouse_event、SendInput)调用

我的代码使用WH_MOUSE_LLHook来最初抑制所有鼠标输入,除非dwExtraInfo属性设置为特定值。该程序还注册了鼠标设备的原始输入,因此我可以识别哪个设备负责输入。当我收到WM_INPUT消息并确定源时,根据设备我可能只想让事件生效,在这种情况下我用SendInput重新创建它(尝试过mouse_event,它也已被取代),提供数据在dwExtraInfo属性中。这个想法是Hook应该看到这个新的注入(inject)事件,看到额外的信息而不是抑制它。不幸的是,注入(inject)的事件永远不会被钩子(Hook)看到。尽管窗口过程看到相应的WM_INPUT消息,但SendIn

c# - "The description for Event ID X in Source Y cannot be found."

我正在尝试将我的Web应用程序中的自定义事件写入Windows事件日志。我一直没有让消息字符串正常工作,我不断收到“找不到源Y中事件IDX的描述。”为了缩小范围,我决定将一个事件写到我的机器上已经存在的源中。我刚刚查看了其中一个已写出的事件,特别是SceCli事件1704。我执行以下代码:varlog=newEventLog("Application");log.Source="SceCli";varev=newEventInstance(1704,0,EventLogEntryType.Information);log.WriteEvent(ev);但是,这仍然在事件查看器中为我提供