繁体   English   中英

在向量中插入下一个值以使用迭代器进行映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM