Что я могу сделать, чтобы сохранить трек для векторов элементов? - PullRequest
0 голосов
/ 02 октября 2018

Я читаю матрицы из ввода с ifstream.Затем я беру элемент [0][0] th этих матриц и помещаю его в vector и сортирую (по убыванию).

Мой вопрос заключается в том, что при сортировке элементов я теряю номер матрицы этих элементов.Мне это надо;Я должен дать вывод, чтобы показать, что матрица c th является суммой матриц a th и b th .

ПослеЯ сортирую их, я не могу найти, какая матрица какая.

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)

Спасибо.

1 Ответ

0 голосов
/ 02 октября 2018

Вместо std::vector<int> вы можете сохранить std::vector<std::pair<int, int>>, где первое значение в паре является значением этого индекса, а второе значение является самим индексом(рассчитывается по row*(num_cols)+ col).

Когда вы сортируете, вам просто нужно посмотреть на значение этого индекса, например:

std::vector<std::pair<int, int>> temp;
if(temp.at(some_spot).first < temp.at(other_spot).first) { ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...