【发布时间】:2016-02-12 23:14:57
【问题描述】:
这类似于this question,但不是重复的。我正在尝试遍历地图并打印每个元素的值,但最后一个元素的输出略有不同。在那个问题中,他们建议使用map.rbegin().base(),但这对我不起作用。
这是我的代码:
#include <iostream>
#include <map>
int main()
{
std::map <char, int> charMap = { {'a', 1}, {'b', 2}, {'c', 3}, {'d', 4} };
for (auto iter = charMap.begin(); iter != charMap.end(); iter++)
{
std::cout << iter->first << ":\t" << iter->second;
if (iter == charMap.rbegin().base())
std::cout << "\t//This is the last element.\n";
else
std::cout << "\n";
}
}
我希望我的输出如下所示:
a: 1
b: 2
c: 3
d: 4 //This is the last element.
但是,相反,我得到了这个输出:
a: 1
b: 2
c: 3
d: 4
现在我意识到有更好的方法可以做到这一点,但我希望这也能奏效。为什么我不能比较iter 和charMap.rbegin().base()?
【问题讨论】:
-
请注意,在这种情况下,通常很容易重写循环体,以便对第一个而不是最后一个元素进行特殊处理。
-
@ChristianHackl 注意,这显然不是这里的情况 :)
-
@BartoszKP:为什么不呢?除了第一行以外的每一行都以换行符开始,将“这是最后一个元素”放在循环之后。
-
@ChristianHackl 你是对的,但是 OP 确实意识到了这一点,并且问题是专门针对流程的。
标签: c++ dictionary iterator std