如何跟踪向量元素怎么办?

时间:2018-10-02 18:12:28

标签: c++ algorithm sorting matrix vector

我使用PDF Error 144: Invalid TrueType data found Assert Failed: cmap_off > -1 从输入中读取矩阵。然后,我将这些矩阵的ifstream th 元素放入[0][0]中并进行排序(降序)。

我的问题是,当我对元素进行排序时,我无法跟踪这些元素的矩阵编号。我需要它;我必须给出一个输出以显示第c th 个矩阵是第a th 个和第b th 个矩阵的和。

对它们进行排序后,我找不到哪个矩阵。

vector

在这里,我将元素放入向量中,然后按降序对其进行排序。

for(int r=0;r<(matrixColumn*matrixRow);r++) {
    for(int x=0;x<matrixColumn;x++) {
        for(int y=0;y<matrixRow;y++) {
            for(int u=0;u<matrixNumber;u++) {
                temp.push_back(totalmat[u][x][y]);
            }
            for(int v = 1; v < temp.size(); v++){
                key = temp[v];
                for(w = v - 1; (w >= 0) && (temp[w] < key); w--) {
                    temp[w+1] = temp[w];
                }
                temp[w+1] = key;
            }

这是我添加元素的函数。它查找是否有两个元素之和。我需要按元素的第一个不规则顺序知道哪个是两个2元素之和。

例如:

如果初始订单如下:

bool IfkIsTwo(vector<int> temp, int &q,int &f,int &z)
{
    int a=temp.size()-1;
    int b=temp.size()-2;
    for(int c=0;c<temp.size()-2;c++) {
        for(int d=1;d<temp.size()-2;d++) {
            while(b!=c) {
                if(temp[a]+temp[b]==temp[c])
                    return true;
                else
                    b--;   
            }
            a=temp.size()-d-1;
            b=temp.size()-d-2;
        }
    }
    return false;
}

我将这些排序:

3 2 5 7 1 4

发现2和5的总和为7,它必须给我7 5 4 3 2 1 (以0开头)

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以存储std::vector<int> std::pair std::vector<来代替<int, int>>,其中对中的第一个值是该索引的值,第二个值是索引本身(由row*(num_cols)+ col计算)。

排序时,您只需要看一下该索引处的值即可:

std::vector<std::pair<int, int>> temp;
if(temp.at(some_spot).first < temp.at(other_spot).first) { ...