【问题标题】:Fetch first two elements from map从地图中获取前两个元素
【发布时间】:2020-07-31 16:34:06
【问题描述】:

我只需要读取std::map 中的前两个元素。

这是我的代码:

#include<iostream>
#include<map>
#include<iterator>
using namespace std;
int main() {
    map<int,int> a;
    map<int,int>:: iterator itr;
    itr = a.begin();
    cout<<itr->first<<" "<<itr->second<<endl;
    next(itr);
    cout<<itr->first<<" "<<itr->second<<endl;
    return 0;
}

我收到此错误:

next 未在作用域中声明

我在这里缺少什么以及是否有更好的方法?

【问题讨论】:

  • 适用于我,使用 gcc 9。也许您使用的是不支持 c++11 的旧 C++ 编译器?
  • @SamVarshavchik : 任何替代解决方案
  • std::advance(iter, 1);
  • 是的。还有其他方法可以增加迭代器。有关更多信息和示例,请参阅 C++ 教科书。
  • 看看是否可以在编译器命令行中添加-std=c++11或类似的命令行。

标签: c++ iterator stdmap


【解决方案1】:

要使用std::next,您至少需要有符合 C++11 的编译器。

std::next 返回一个新的递增迭代器。因此,您需要使用它的返回值来获取递增的迭代器,即:

itr = next( itr );

现在,itr 指向同一个元素,因为没有使用返回值。

如果您打算在没有新迭代器的情况下增加itr,那么std::advance 是一个更好的候选者,即:

std::advance( itr, 1 );

如果您使用的是 C++11 之前的编译器,那么您可以像这样使用增量运算符:

itr++;

或者,

++itr;

这是一个live 演示。


此外,地图未初始化/为空,您尝试访问其不存在的元素,这将导致Undefined Behavior

相关阅读:

【讨论】:

    【解决方案2】:

    您应该使用itr++ 将其向前移动以指向下一组对。您可以通过map-&gt;first;map-&gt;second; 访问它们

    【讨论】:

      猜你喜欢
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多