c++ - C++中不同大小 vector 的迭代映射

标签 c++ dictionary vector

所以我在 C++ 中声明了以下映射:

typedef vector<Vector2D> stackPoints; 
typedef map<int, stackPoints> mapPoints; 
mapPoints drawingPoints;

给它加值后,想输出里面所有的元素,但是不同关键位置的 vector 大小不一样:

我正在使用以下两个不起作用的 for 循环。有时程序在运行时崩溃并给我超出范围的 vector 错误。

for (int j = 0; j < drawingPoints.size(); j++)
{
    for (int i = 0; i < drawingPoints[j].size(); i++)
    {
        cout << "(...)" << endl
    }
}

在我看来,内部的 for 循环已经经历了一定的次数,就好像下面的场景是不可能的:

1) 第一个 vector 的大小为 1,因此内部 for 循环将执行一次。

2) 然后 map 的第二个 vector 的大小为 5,现在我希望 for 循环经过 5 次,但这似乎不起作用。

** 编辑 **

我使用整数键作为计数器,所以当我添加另一对时我将它递增 1。

最佳答案

出于多种原因,您应该使用迭代器。

  1. 您的 map 可能不包含从 0 到 drawingPoints.size() 的每个元素,当您遍历它时,您将创建它不包含的每个元素。
  2. 您的最高条目可能大于 drawingPoints.size(),在这种情况下您将永远无法到达。

让我们看看最外层的循环,如果你想为它定义一个迭代器,你应该执行以下操作:

for (mapPoints::Iterator it = drawingPoints.begin(); it != drawingPoints.end(); it++) {

这将创建一个您可以查看的迭代器(通过执行 it->*it)。

可以找到更多信息here .

关于c++ - C++中不同大小 vector 的迭代映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34344844/

相关文章:

c++ - 将 vector<char> 传递给指针 char*

c++ - CUDA NVCC 编译器错误

c++ - Variadic 模板模拟 "runtime"扩展

C++ 重写虚方法抛出错误 "LNK2001: unresolved external symbol"

c++ - 来自另一个线程的 SendMessage() 调用是否将消息发送到消息队列?

java - 如何索引 java.util.Collections$UnmodifyingMap 的类类型?

python : Can Dictionary be used for indexing?

Python:处理循环中不存在的字典值

vector - 循环向量

c++ - 指针的按字母顺序排列(排序) vector