C++ 在多维向量中插入数据和排序

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

我试图插入基于给定值的数据-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  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;