C++ 从映射的第二个元素开始迭代

问题描述 投票:0回答:6

我有一个

std::multimap
,我正在使用前向迭代器进行迭代。

std::multimap<int,char>::iterator it;
for(it=map.begin();it!=map.end();++it) {
    // do something
}

现在我需要以不同的方式对待第一个元素,并从地图的第二个元素开始迭代。我该怎么做?

c++ stl multimap
6个回答
12
投票
std::multimap<int,char>::iterator it;

for(it = std::next(map.begin()); it != map.end(); ++it) {
    // do something
}

这仅适用于 C++11。您需要包含

<iterator>

另一个选择很明显,但不太漂亮:

it = map.begin();
++it;
for(; it != map.end(); ++it) {
    // do something
}

也看看

std::advance


6
投票

看起来好像更短了

it = ++map.begin(); 

2
投票
std::multimap<int,char>::iterator it = map.begin();
//treat it here
++it
for(;it!=map.end();++it) {

}

1
投票
for(bool First=true, it=map.begin();it!=map.end();++it) {
    if (First) { do something; First=false; }
    else { do something else; }
}

或者,如果您愿意的话:

iterator it=map.begin();
if (it!=map.end()) { do something; ++it; }
for (; it!=map.end(); ++it) { do something }

1
投票

将 for 初始化器中的

it = map.begin()
更改为
it = map.begin(), ++it


0
投票

可以直接使用这个

unordered_map<int,int> map;

n = 1
auto it = std::next(map.begin(), n);

int key = it->first

© www.soinside.com 2019 - 2024. All rights reserved.