【问题标题】:traverse in vector<vector<pair<int, int> > >遍历向量<vector<pair<int, int> >
【发布时间】:2017-06-20 15:23:05
【问题描述】:

我遇到了一个我无法解释原因的情况。我有一个vector&lt;vector&lt;pair&lt;int, int&gt; &gt; &gt; parent,表示特定单元格的parent。我有以下代码:

 // (1, 0), (1, 2), (1, 2)
 // (1, 2), (-1, -1), (1, 2)
 // (-1, -1), (2, 1), (-1, -1)
 vector<vector<pair<int, int> > > nums = {
      {make_pair(1, 0), make_pair(1, 2), make_pair(1, 2)},
      {make_pair(1, 2), make_pair(-1, -1), make_pair(1, 2)},
      {make_pair(-1, -1), make_pair(2, 1), make_pair(-1, -1)}};
  int r = 0;
  int c = 1;
  while (nums[r][c] != make_pair(r, c)) {
    cout << nums[r][c].first << " " << nums[r][c].second << endl;  // 1, 2
    r = nums[r][c].first;   // 1
    c = nums[r][c].second;  // -1
    cout << "r: " << r << " c: " << c << endl;
  }

我不确定为什么在while 循环的第一次迭代中,c = nums[r][c].second; 返回 -1 而不是 2。

【问题讨论】:

  • 此时,您已经为r 分配了一个新值。在第一次迭代中,您将拥有c = nums[1][1].second
  • 另外,您不需要所有的make_pair() 噪音。只需使用大括号初始化:std::vector&lt; std::pair&lt;int, int&gt; &gt; blah{ {21, 42}, {101, 404}, }(是的,它也适用于嵌套的vectors。)

标签: c++ vector std-pair


【解决方案1】:

在第一次迭代中,

 r=num[0][1].first = 1.

因此

c=num[1][1].second = - 1.  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2020-07-08
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多