[英]Inserting next value in vector to map using iterator
我想将向量中的下一个和上一个元素添加到地图中。 我以为可以使用迭代器来执行此操作,但是以下代码对我不起作用。 有人可以解释一下该怎么做以及我的错误是什么。 谢谢。
90 for ( it = vec.begin(); it != vec.end(); it++)
91 {
92 int Flag1 = vec.front();
93 int Flag2 = vec.back();
94
95 if( *it == Flag1)
96 mymap[*it].insert(*(it++)); // Add next element
97 else if( *it == Flag2 )
98 mymap[*it].insert(*(it--)); // Add previous element
99 else
100 {
101 mymap[*it].insert(*(it--)); // Add previous element
102 mymap[*it].insert(*(it++)); // Add next element
103 }
104 }
您不想在此循环中移动迭代器( it++
和++it
都可以!),您只想获取下一个和上一个。 使用C ++ 11,我们可以在一个简单的函数调用中进行处理:
std::next(it);
std::prev(it);
在C ++ 11之前的版本中,您可以轻松编写它们:
template <typename It> It next(It it) { std::advance(it, 1); return it; }
template <typename It> It prev(It it) { std::advance(it, -1); return it; }
因此,添加下一个和上一个元素将如下所示:
mymap[*it].insert(*next(it));
mymap[*it].insert(*prev(it));
请注意,您不是在检查迭代器是在开头还是结尾,而是它们的值。 如果您有重复的值,这可能会出现问题。 宁愿比较开始和结束:
if (it == vec.begin()) {
// only add next
mymap[*it].insert(*next(it));
}
else if (next(it) == vec.end()) {
// only add prev
mymap[*it].insert(*prev(it));
}
else {
// add both
mymap[*it].insert(*next(it));
mymap[*it].insert(*prev(it));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.