我遇到了这个问题: 实现一个队列,其中push_rear(),pop_front()和get_min()都是常量时间操作.
我最初想过使用一个最小堆数据结构,它对于get_min()具有O(1)复杂度.但是push_rear()和pop_front()将是O(log(n)).
有谁知道实现这样一个有O(1)push(),pop()和min()的队列的最佳方法是什么?
我搜索了这个,并想指出这个算法极客线程.但似乎没有一个解决方案遵循所有3种方法的恒定时间规则:push(),pop()和min().
感谢所有的建议.
我在javascript中创建了一个Queue类,我希望将函数存储为队列中的数据.这样我就可以构建请求(函数调用)并在需要时(实际执行函数)响应它们.
有没有办法将函数存储为数据,有点类似于
.setTimeout("doSomething()", 1000);
Run Code Online (Sandbox Code Playgroud)
除了它会
functionQueue.enqueue(doSomething());
Run Code Online (Sandbox Code Playgroud)
它将doSomething()存储为数据,因此当我从队列中检索数据时,将执行该函数.
我猜我必须在引号中使用doSomething() - >"doSomething()"以及如何使用字符串调用函数,任何人都知道如何做到这一点?
我需要一个简单的FIFO实现队列来存储一堆int(如果它是泛型实现,我不介意).
在我java.util或Trove/Guava图书馆里为我准备过的东西了吗?
我需要迭代std::queue.www.cplusplus.com说:
默认情况下,如果没有为特定队列类指定容器类,则使用标准容器类模板deque.
那么我可以以某种方式到达队列的底层deque并迭代它吗?
我发现有时我需要迭代一些集合并为每个元素进行ajax调用.我希望在转移到下一个元素之前返回每个调用,这样我就不会向服务器发送请求 - 这通常会导致其他问题.我不想将异步设置为false并冻结浏览器.
通常这涉及设置某种迭代器上下文,我逐步通过每个成功回调.我认为必须有一个更简洁的方式?
有没有人有一个聪明的设计模式,如何通过一个集合为每个项目制作ajax调用整齐地工作?
我正在研究的项目使用多个线程来处理文件集合.每个线程都可以将文件添加到要处理的文件列表中,因此我将(我认为是)一个线程安全的队列放在一起.相关部分如下:
// qMutex is a std::mutex intended to guard the queue
// populatedNotifier is a std::condition_variable intended to
// notify waiting threads of a new item in the queue
void FileQueue::enqueue(std::string&& filename)
{
std::lock_guard<std::mutex> lock(qMutex);
q.push(std::move(filename));
// Notify anyone waiting for additional files that more have arrived
populatedNotifier.notify_one();
}
std::string FileQueue::dequeue(const std::chrono::milliseconds& timeout)
{
std::unique_lock<std::mutex> lock(qMutex);
if (q.empty()) {
if (populatedNotifier.wait_for(lock, timeout) == std::cv_status::no_timeout) {
std::string ret = q.front();
q.pop();
return ret;
}
else {
return std::string();
}
}
else …Run Code Online (Sandbox Code Playgroud) 我正在寻找java.util.Queue的实现或Google集合中表现得像Queue的东西,但也要确保队列中的每个元素都是唯一的.(所有进一步插入都没有效果)
这是可能的,还是我必须手工完成?
现在我正在使用一个带有LinkedList实现的Queue,并在插入之前检查唯一性.(我使用侧面Map来执行此操作,在队列之前/之后添加/删除侧面图中的元素).我不太喜欢它.
欢迎任何输入.如果它不在java.util包中,那么也许这是一个坏主意?
我可以使用迭代器(如a )遍历c ++中的标准priority_queue或标准吗?我不想使用pop,因为它导致我的队列出列.queuevector
谢谢你的帮助
我有一个Queue <T>对象,我已初始化为容量为2,但显然这只是容量,并且随着我添加项目而不断扩展.是否已有一个对象在达到限制时自动使项目出列,或者是创建自己的继承类的最佳解决方案?
我有一个Queue对象,我需要确保它是线程安全的.使用这样的锁对象会更好吗:
lock(myLockObject)
{
//do stuff with the queue
}
Run Code Online (Sandbox Code Playgroud)
或者是否建议像这样使用Queue.Synchronized:
Queue.Synchronized(myQueue).whatever_i_want_to_do();
Run Code Online (Sandbox Code Playgroud)
从阅读MSDN文档开始,我说我应该使用Queue.Synchronized来使它成为线程安全的,但是它给出了一个使用锁对象的例子.来自MSDN文章:
为了保证Queue的线程安全,所有操作必须仅通过此包装器完成.
枚举通过集合本质上不是线程安全的过程.即使集合是同步的,其他线程仍然可以修改集合,这会导致枚举器抛出异常.为了在枚举期间保证线程安全,您可以在整个枚举期间锁定集合,也可以捕获由其他线程所做的更改导致的异常.
如果调用Synchronized()不能确保线程安全有什么意义呢?我在这里错过了什么吗?