C++ 在多维向量中插入数据和排序
我试图插入基于给定值的数据-strBeg。我希望向量根据这个值进行数字排序。有两个不同的向量。我的驱动程序如下所示,我希望输出为:C++ 在多维向量中插入数据和排序,c++,sorting,vector,C++,Sorting,Vector,我试图插入基于给定值的数据-strBeg。我希望向量根据这个值进行数字排序。有两个不同的向量。我的驱动程序如下所示,我希望输出为: linei[0][0] = 1 linei[0][1] = 8 refi[0][0] = 81 refi[0][1] = 88 linei[1][0] = 21 linei[1][1] = 31 refi[1][0] = 10 refi[1][1] = 20 linei[0][0] = 33 linei[0][1] = 44 refi[0][0] = 0 re
linei[0][0] = 1 linei[0][1] = 8 refi[0][0] = 81 refi[0][1] = 88
linei[1][0] = 21 linei[1][1] = 31 refi[1][0] = 10 refi[1][1] = 20
linei[0][0] = 33 linei[0][1] = 44 refi[0][0] = 0 refi[0][1] = 11
linei[1][0] = 45 linei[1][1] = 47 refi[1][0] = 6 refi[1][1] = 8
如您所见,refBeg/refEnd的值不影响顺序,但必须与strBeg/strengd对保持一致。我已经在下面发布了我的代码…它不工作。我目前的方法将需要一个非常大的排序函数来处理许多不同的情况,如果可能的话,我希望避免这种情况。我想知道是否有更有效的方法来实现这一点?我曾经考虑过将两个向量合并成一个包含4列的向量,但我不希望这样,因为这会使理解更加混乱(但如果这是最好/最简单的选择,我并不完全反对)。此外,第I行中不会有重叠,因为不会有两组数据具有相同的strBeg,strBeg/strEnd不会位于其他字符串起点和终点之间。我通读了其他一些类似的问题,但不太明白如何使它们适应我的情况。任何帮助都将不胜感激!!!
注:如果我今晚不回复,我会在早上回复。再次感谢
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void insertData(const int refBeg, const int refEnd, const int strBeg, const int strEnd, vector<vector<int> >& refi, vector<vector<int> >& linei);
int main(int argc, const char * argv[])
{
vector<vector<int> > refi;
vector<vector<int> > linei;
insertData(0, 11, 33, 44, refi, linei);
insertData(10, 20, 21, 31, refi, linei);
insertData(6, 8, 45, 47, refi, linei);
insertData(80, 88, 1, 8, refi, linei);
for (int i=0; i<linei.size(); i++) {
cout << "linei[" << i << "][0] = " << linei[i][0] << " ";
cout << "linei[" << i << "][1] = " << linei[i][1] << " ";
cout << "refi[" << i << "][0] = " << refi[i][0] << " ";
cout << "refi[" << i << "][1] = " << refi[i][1] << endl;
}
return 0;
}
void insertData(const int refBeg, const int refEnd, const int strBeg, const int strEnd, vector<vector<int> >& refi, vector<vector<int> >& linei) {
linei.push_back(vector<int>() );//creates a new row in linei
refi.push_back(vector<int>() );//creates a new row in refi
int size=(int)linei.size();
if ((size-1) == 0) {
linei[0].push_back(strBeg);
linei[0].push_back(strEnd);
refi[0].push_back(refBeg);
refi[0].push_back(refEnd);
} else {
for (int i=0; i<size; i++) {
if (strBeg > linei[i][0]) {
linei[i+1].push_back(strBeg);
linei[i+1].push_back(strEnd);
refi[i+1].push_back(refBeg);
refi[i+1].push_back(refEnd);
break;
}
}
}
}
#包括
#包括
#包括
使用名称空间std;
void insertData(const int refBeg、const int refEnd、const int strBeg、const int streng、vector&refi、vector&linei);
int main(int argc,const char*argv[]
{
载体再灌注;
向量linei;
插入数据(0,11,33,44,refi,linei);
插入数据(10,20,21,31,refi,linei);
插入数据(6,8,45,47,refi,linei);
插入数据(80,88,1,8,refi,linei);
对于(inti=0;i而不是并行向量,为什么不将相关元素放入struct
struct line_ref
{
vector<int> linei;
vector<int> refi;
};
vector <line_ref> line_ref_i;
struct line\u ref
{
向量linei;
载体再灌注;
};
矢量线;
或者,如果您不介意字段的通用名称,比如first
和second
,您可以使用std::pair
,而不是声明一个结构。出于存储目的,这似乎是一种方法,但是如何对它们进行排序呢?这是我真正的问题。不过,谢谢您迄今为止的帮助!如果您愿意的话提供一个合适的运算符我在理解最后一行时有点困难。您是否使用运算符重载来表示“我找到了它。谢谢!”!
struct line_ref
{
vector<int> linei;
vector<int> refi;
};
vector <line_ref> line_ref_i;