c++ - 使用迭代器在 vector 中插入下一个值以进行映射

标签 c++ pointers dictionary vector iterator

我想将 vector 中的下一个和上一个元素添加到 map 中。我以为我可以使用迭代器来做到这一点,但下面的代码对我不起作用。有人可以解释一下如何做到这一点以及我的错误是什么。谢谢。

 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);

Pre-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));
}

关于c++ - 使用迭代器在 vector 中插入下一个值以进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28103252/

相关文章:

C printf : variable string column width, 左对齐

c - 使用指针交换字符串的第一个字符

python - 将 csv 中的字典复制到新的 dict-python

python - 如何删除字典中的键值?

c++ - 在 C++17 中重载命名空间和子命名空间中的运算符是不明确的

c++ - 我的操作系统中的 mykernel.iso 执行错误

c++ - 类中的 "this"指针

python - 迭代列表并按位置从嵌套字典返回值

c++ - 如何使用 QT 在 Linux 上正确显示 unicode 符号?

c++ - 在 Linux 上用 C++ 实现线程安全的通用堆栈