C++ 如何根据数组对应向量的值对数组进行排序?

C++ 如何根据数组对应向量的值对数组进行排序?,c++,algorithm,sorting,stdvector,C++,Algorithm,Sorting,Stdvector,我想根据相应向量的值对我的行数组进行排序。这意味着,我有一个向量,它包含相同长度的整数向量标准::向量向量向量。 根据vect的值,我想对数组行进行排序行< /代码>包含 N< /代码>元素,其中第一个元素给出了我们应该考虑的行数。如果行[0]==2那么我们应该只关心行[0]之后的2个元素 例如: Input: vect = {{0,2,3},{2,1,5},{1,2,4}} row = {3,0,1,2,-1,-2,15} 请注意,在行中,我们只关心第二到第四个元素

我想根据相应向量的值对我的
数组进行排序。这意味着,我有一个向量,它包含相同长度的整数向量<代码>标准::向量向量向量。 根据
vect
的值,我想对数组
行进行排序<代码>行< /代码>包含<代码> N< /代码>元素,其中第一个元素给出了我们应该考虑的行数。如果
行[0]==2
那么我们应该只关心
行[0]
之后的2个元素

例如:

Input:   vect = {{0,2,3},{2,1,5},{1,2,4}} 
         row  = {3,0,1,2,-1,-2,15}
请注意,在
中,我们只关心第二到第四个元素,因为它的第一个元素是3(表示
vect
的大小。即,
行[0]=vect.size()

我想根据值对数组和向量进行排序
023、215和124
。也就是说,在对向量进行排序之后,根据它的元素的新位置,我应该根据它的第一个元素对数组进行排序。(只需对所需的进行排序。)

所以我想得到的是:

非常感谢你的帮助。代码如下:

std::vector<int> seq;
int pair;
while(pair!=-1) {
    seq.push_back(letter[pair--]);
}

.
.
.
int* row = new int[N]; // N is the input
std::vector<std::vector<int>> vect;
vect.resize(row[0]);
for(int e=0;e<row[0];e++){
    for(int elm=0;elm<seq.size();elm++)
        vect[e].push_back(outputs[seq[elm]][row[e+1]]);
}
sort(vect,row); // sort both?
std::vector seq;
整数对;
while(配对!=-1){
顺序:向后推(字母[对--]);
}
.
.
.
int*行=新的int[N];//N是输入
std::vector-vect;
调整向量大小(行[0]);

对于(int e=0;e以下内容将给出您所需的输出或至少放弃(可能是无效的)来解决您的问题。希望,这些评论可以引导您完成

#包括
#包括
#包括
#包括
int main()
{
向量向量={0,2,3},{2,1,5},{1,2,4};
向量行={3,0,1,2,-1,-2,15};
//新向量:整数对->表示向量和索引行
std::vector newVect;
newVect.reserve(vect.size());
int指数=0;
for(const std::vector&每行:vect)
{
std::string str;//将vect的每一行转换为单个整数字符串
for(const int Integer:each_row)str+=std::to_string(Integer);
新向量。放置回(std::生成对(str,index));
++指数;
}
//根据整个2D矢量行(单个字符串)对新矢量进行排序
排序(newVect.begin(),newVect.end(),[](常量自动和lhs,常量自动和rhs)
{
返回lhs.first对于(auto index=1;index您对问题的解释措辞混乱,难以理解您在问什么以及您的问题是什么。您应该编辑您的问题,使其包含清晰、明确的语句,解释代码的用途、预期的输出以及错误的输出获取。如果你这样做,你将更有可能得到一个有用的答案。我认为我们需要一个输入、过程和所需输出的清晰示例。我理解的问题是,你想根据
行中的索引对
向量
中的
向量
进行排序,但这在负面情况下毫无意义
行中的数字
。这个问题中的许多短语让我停顿。我不确定自己是否理解所说的内容。“想要的”、“我们只是关心”、“也就是说”、“相同长度的整数”和四个不同的“我想要…”也许写这段代码有困难,因为描述这个问题有困难?没有得到全部,但从我的理解来看,我想知道;如果
行[0]==5
?数组中有一些负值,而2D向量数组中没有那么多行。恐怕在更新后我仍然无法理解您的要求。看起来好像给定了3,您希望对元素3、4和5进行排序,但
vect
的示例中没有3、4和5。@我希望这能有所帮助ful.)
std::vector<int> seq;
int pair;
while(pair!=-1) {
    seq.push_back(letter[pair--]);
}

.
.
.
int* row = new int[N]; // N is the input
std::vector<std::vector<int>> vect;
vect.resize(row[0]);
for(int e=0;e<row[0];e++){
    for(int elm=0;elm<seq.size();elm++)
        vect[e].push_back(outputs[seq[elm]][row[e+1]]);
}
sort(vect,row); // sort both?
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
   std::vector<std::vector<int>>  vect = {{0,2,3},{2,1,5},{1,2,4}};
   std::vector<int> row = {3,0,1,2,-1,-2,15};
   // new vector:  pair of integer -> representing the rows of vect and index
   std::vector<std::pair<std::string, int>> newVect;
   newVect.reserve(vect.size());

   int index = 0;
   for(const std::vector<int>& each_row: vect)
   {
      std::string str;             // each row of vect to a single integer string
      for(const int Integer: each_row) str += std::to_string(Integer);
      newVect.emplace_back(std::make_pair(str, index));
      ++index;
   }
   // sort the new vector, according to the whole 2D vector row(which is a single string)
   std::sort(newVect.begin(), newVect.end(), [](const auto& lhs, const auto& rhs)
   {
      return lhs.first < rhs.first;
   });
   // now you can actually store the sorted vect
   vect.clear();
   for(auto index = 1; index <= row[0]; ++index)
   {
      row[index] = newVect[index-1].second;  // replace the row indexes which are sorted
      std::vector<int> vect_row;
      // change each chars of string back to corresponding row elements
      for(const char Integer: newVect[index-1].first)
         vect_row.emplace_back(static_cast<int>(Integer - '0'));
      // store to original vector
      vect.emplace_back(vect_row);
   }

   // to print
   for(const std::vector<int>& each_row: vect)
   {
      for(const int Intger: each_row)
         std::cout << Intger << " ";
      std::cout << std::endl;
   }
   for(const int it: row) std::cout << it << " ";
   return 0;
}