の最小要素を取得する必要がありstd::map
ます。利用可能なドキュメントがたくさんあることは承知しています。しかし、私は何かを働かせることができないようです。
と の 2 つのマップが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
)。
事前にどうもありがとうございました。