Получить первые два элемента с карты - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужно прочитать только первые два элемента из 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 не было объявлено в области действия

что мне здесь не хватает и есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Для использования std :: next необходим компилятор, совместимый как минимум с C ++ 11.

std::next возвращает новый инкрементный итератор. Итак, вам нужно использовать его возвращаемое значение, чтобы получить увеличенный итератор, т.е.:

itr = next( itr );

Прямо сейчас, itr указывает на тот же элемент, поскольку возвращаемое значение не используется.

Если вы намеревались увеличить itr без нового итератора, тогда std :: advance является лучшим кандидатом здесь, т. Е.:

std::advance( itr, 1 );

Если вы используете пре-C ++ 11 компилятор, то вы можете использовать оператор приращения следующим образом:

itr++;

Или,

++itr;

Вот live демо.


Кроме того, карта неинициализирована / пуста, и вы пытаетесь получить доступ к ее элементам, которых там нет, и это приведет к Неопределенному поведению .

Соответствующее чтение:

0 голосов
/ 18 апреля 2020

Вы должны использовать itr++, чтобы продвинуться вперед, чтобы указать следующий набор пар. и вы можете получить к ним доступ по map->first; и map->second;

...