【问题标题】:What can I do for keeping the track for a vectors elements?我可以做些什么来跟踪向量元素?
【发布时间】:2019-03-07 22:02:09
【问题描述】:

我从ifstream 的输入中读取矩阵。然后,我将这些矩阵的 [0][0]th 元素放入 vector 并排序(降序)。

我的问题是,当我对元素进行排序时,我忘记了这些元素的矩阵编号。我需要它;我必须给出一个输出来显示 cth 矩阵是 ath 和 bth 矩阵的总和。

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

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;
            }

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

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

我将这些排序如下:

7 5 4 3 2 1

发现 2 和 5 之和为 7,它必须给我The matrix 3 is sum of the matrices 1 and 2(它以 0 开头)

谢谢。

【问题讨论】:

    标签: c++ algorithm sorting matrix vector


    【解决方案1】:

    您可以存储 std::vector&lt;std::pair&lt;int, int&gt;&gt; 而不是 std::vector&lt;int&gt;,其中第一个值是该索引的值,第二个值是索引本身(由 row*(num_cols)+ col 计算)。

    当您进行排序时,您只需要查看该索引处的值,例如:

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

    【讨论】:

    • 您可以使用带有std::vector&lt;T&gt; 的任何类来代替std::pair&lt;int,int&gt;。我更喜欢带有命名成员的结构而不是一对:struct matrix_info { int index, int value }; std::vector&lt;matrix_info&gt; the_vector; Name 适当。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2012-10-11
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多