我可以在 C++ 中使用 ** vector < pair <int ,vector < int >> > vec** 之类的声明吗?

Can I have delcaration like ** vector < pair <int ,vector < int >> > vec** in C++?

我可以在 C++ 中声明像 vector < pair < int ,vector < int > > >vec 这样的向量吗?

实际上,我想制作一个二维向量(以对的形式),其中对的第一个元素对应于某个键(如 2 ,3 ,4 ),第二个元素将包含一个向量。 我正在配对,因为我想根据键(pair < int ,vector < int > 的第一个元素)对二维向量进行排序。

如果是,那么如何从每一行中获取存储的值?

我写了代码,但我知道它不正确。请帮助以及如何帮助代码中的 sort() 函数。

/*  Box Stacking */

bool comp(pair<int,vector<int> >a,pair<int,vector<int> >b)   // sort ???
{
   return (a.first > b.first);
}

int maxHeight(int height[], int width[], int length[], int n)
{
   vector<pair<int,vector<int> > >vec;   // IS THIS DECLARATION CORRECT 
   vector<int> v;
   for(int i=0;i<n;i++)
   {
      v.push_back(height[i]);
      v.push_back(width[i]);
      v.push_back(length[i]);

      do
      {
         vec.push_back({(v[0]*v[1]),v});
      }while(next_permutation(v.begin(),v.end()));
      v.clear();
    }

    sort(vec.begin(),vec.end(),comp);
    int dp[n+2];

    for(int i=0;i<n;i++)
    {
       dp[i] = vec[i].second.[2];   // HERE HOW TO GET THE ELEMENT
    }                              //( I am tryinh to access the 2nd index element from each row)
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<i;j++)
        {
           if(vec[i].second.[0]<vec[j].second.[0] &&              // similar problem here
           vec[i].second.[1]<vec[j].second.[1]  && dp[i] < dp[j] + 1)
           {
               dp[i] = dp[j] + 1;
           }
        }
    }

    int maxi = 0;
    for(int i=0;i<n;i++)
    maxi = max(maxi,dp[i]);

    return maxi;
}

Can I have delcaration like vector < pair <int ,vector < int >> > vec in C++?

是的,你可以。这没有错。

关于访问值数组中的元素,这里,

std::pair<int, std::vector<int> >
          key,   vector_array

每个键都有一个向量数组。使用 operator[] 访问数组元素将是 array[array_index](或使用基于范围的 for 循环或迭代器循环)

这是 std::parsecond。 IE。 .second[array_index].

因为你有一个上面提到的数组:vec[index_pair_array].second[array_index] 将是访问这个二维数组中每个元素的合适方法。

那么你需要这个:

   for(int i=0;i<n;i++)
   {
      dp[i] = vec[i].second[2];   
   }                              
   for(int i=0;i<n;i++)
   {
       for(int j=0;j<i;j++)
       {
           if(vec[i].second[0] < vec[j].second[0] &&              // similar problem here
              vec[i].second[1] < vec[j].second[1]  && dp[i] < dp[j] + 1)
              {
                  dp[i] = dp[j] + 1;
              }
       }
   }