我可以在 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::par
的 second
。 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;
}
}
}
我可以在 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::par
的 second
。 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;
}
}
}