我需要获取 a 中的最小元素std::map
。我知道有很多可用的文档;但是,我似乎无法工作。
我有两个地图,bid
和ask
,它们都是Book
该类的属性。每个都是队列地图。这些队列中的每一个都包含Order
对象(具有各种属性,如price
、volume
等)。我有一个成员函数update
,它可以获得最佳出价、最佳要价和点差:
void update(void)
{
unsigned long long highest_bid, lowest_ask = 0;
for (std::map<unsigned long long, queue<Order>>::iterator it = this->bid.begin(); it != this->bid.end(); ++it)
{
highest_bid = it->first;
}
// best ask code here
this->bestBid = highest_bid;
this->bestAsk = lowest_ask;
this->spread = labs(this->bestAsk - this->bestBid);
}
询问代码在哪里,我尝试了以下方法:
lowest_ask = this->ask.begin()->first;
这可以编译,但是当我调试时它会引发断言失败(我在这里阅读了其他问题,但似乎无法理解):
Expression: map/set iterator not dereferencable
我试过反向迭代:
for(std::map<unsigned long long, queue<Order>>::reverse_iterator rit = this->ask.rbegin(); rit != this->ask.rend(); ++rit)
{
lowest_ask = rit->first;
}
哪个编译和调试很好,但lowest_ask
始终为 0,这是错误的。当我在调试器中单步执行它时,它不会停止,直到它达到零。
我试过交换迭代器:
for(std::map<unsigned long long, queue<Order>>::reverse_iterator rit = this->ask.rend(); rit != this->ask.rbegin(); ++rit)
{
lowest_ask = rit->first;
}
这编译得很好,但又一次抛出了调试断言失败。
我可以继续我已经尝试过的内容,但是这个问题已经过于复杂了。我只是不明白为什么我不能做我一开始所做的事情(lowest_ask = this->ask.begin()->first
)。
非常感谢您提前。