我可以在C ++中声明像vector < pair < int ,vector < int > > >vec
这样的向量吗?
实际上,我想制作一个二维矢量(以一对的形式),其中一对的第一个元素对应于某个键(例如2 ,3 ,4
),而第二个元素将保存一个vector。
我之所以要配对,是因为我想根据key(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;
}
答案 0 :(得分:0)
我可以在C ++中使用
vector < pair <int ,vector < int >> > vec
这样的代名词吗?
是的,可以。没错。
关于在此处访问值数组中的元素
std::pair<int, std::vector<int> >
key, vector_array
您需要为每个与向量数组关联的键。用operator[]
访问数组元素将是array[array_index]
(或使用基于范围的for循环或迭代器循环)
这是second
中的std::par
。我.second[array_index]
。
由于您具有上述数组:vec[index_pair_array].second[array_index]
是访问此2D数组中每个元素的适当方法。
那么您需要这个:
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;
}
}
}