c++ - 获取 std::map 中的最小键

标签 c++ c++11 map lob

我需要获取 std::map 中的最小元素。我知道有很多可用的文档;但是,我似乎无法工作。

我有两个 map ,bidask,它们都是 Book 类的属性。每个都是队列图。这些队列中的每一个都包含 Order 对象(具有各种属性,如 pricevolume 等)。我有一个成员函数 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)。

非常感谢您。

最佳答案

迭代 map 并始终分配相同的变量似乎是不必要的艰苦工作。

如果您需要访问 map 中的第一个项目(或 map 中的最后一个项目),那么 begin()(或 rbegin())就是您所需要的。

    std::map <int, int> themap;

    themap[4] = 1;
    themap[2] = 2;
    themap[1] = 3;
    themap[6] = 4;
    themap[5] = 5;
    themap[7] = 6;

    if (!themap.empty())
    {
        std::cout << "item[" << themap.begin()->first << "] = " << themap.begin()->second << std::endl;
        std::cout << "item[" << themap.rbegin()->first << "] = " << themap.rbegin()->second << std::endl;
    }

你唯一需要小心 begin 和 rbegin 的时候是当你的 map 是空的时候

关于c++ - 获取 std::map 中的最小键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841118/

相关文章:

c++ - 如何在模板包扩展期间明确告诉编译器仅选择一个参数模板?

c++ - 错误 C2039 : 'type_name' : is not a member of of 'swig::traits<Bar>'

c++ - 在 Windows 中从文件名获取驱动器号

c++ - 对象存在于 C++ 中意味着什么?

hadoop - 在 HBase 中使用 MapReduce 计算平均计数

c++ - 如何逐行读取文本文件然后解析一行中的字符?

c++ - 在单个 auto 语句中声明多个变量

C++:在初始化程序中类静态变量的定义中查找名称

c++ - C++ 中特定位置映射的迭代器

c++ - 哪种容器类型提供比 std::map 更好的(平均)性能?