我应该将什么变量名传递给函数进行排序?

问题描述 投票:0回答:1

我需要将我整理成两个向量的文件中的数据排序。因此,我正在使用一个函数,该函数将按需要的顺序对数据进行排序,但是,我无法弄清楚在调用和函数定义的()中应该包含哪些变量。我知道我需要传递名称和分数以使函数对其进行排序,但是我不知道是否需要说(字符串名称,int分数)或(向量,向量

//Name
//This program will read and sort names and grades from a file using functions and vectors
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <vector>
using namespace std;

//Function prototype
void selectionSort(vector<int>& vector_values);

int main()
{
    ifstream infile;
    infile.open("student.txt");

    if (infile.fail() == false)
    {
        vector<string> all_names;
        vector<int> all_scores;
        string name;
        int score;
        while (infile >> name >> score) // read one name and one score
        {
            all_names.push_back(name); // add that name to vector
            all_scores.push_back(score); // add that score to vector
            selectionSort();
            cout << name << " "<< score<<", ";
        }

    }
    else
    {
        cout << "Could not open the file." << endl;
    }
return 0;
}

void selectionSort(vector<int>& vector_values)
{
    for (unsigned pass = 0; pass < vector_values.size(); pass++)
    {
        int minimum = vector_values[pass];
        int minimum_index = pass;
        for (unsigned index = pass + 1; index < vector_values.size(); index++)
        {
            if (minimum > vector_values[index])
            {
                minimum = vector_values[index];
                minimum_index = index;
            }
        }

        int temp = vector_values[minimum_index];
        vector_values[minimum_index] = vector_values[pass];
        vector_values[pass] = temp;
    }
}

c++ function vector selection-sort
1个回答
0
投票

您需要先读取所有值,然后在循环后对它们进行排序。

排序函数声明为:

void selectionSort(vector<int>& vector_values);
//                 ~~~~~~~~~~~~

这表示它可以通过引用接受std::vector<int>。因此,参考您的代码,您需要传递all_scores,因为它的类型与sort函数所需的类型相同。]

因此,您的代码如下所示:

// Read values into the vectors
while (infile >> name >> score)
{
    all_names.push_back(name);
    all_scores.push_back(score);
}

// Values are populated, now sort here
selectionSort( all_scores );

如果要保留名称及其关联分数之间的关系,则可能要查看关联容器,例如std::map

如果需要使用std::vector<std::pair<std::string, int>>,则另一种选择可能是std::vector

© www.soinside.com 2019 - 2024. All rights reserved.