Сортировка текстового файла, который содержит целые числа, сортировка должна выполняться построчно - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу отсортировать файл, который содержит целые числа, но хотел сортировать только построчно.Я пытался, но я уверен, что то, что я делаю ниже, не на месте.

void sort_file_in_place(const char* filename) {
    fstream sort_file;
    sort_file.open(filename, ios::out | ios::in);
    vector <vector <int> > input_vect;
    string line;
    std::string delimiter = " ";
    int vect_index = 0;
    while (getline(cin, line)) {
        //store into vector of vectors
        //tokenise string 
        size_t pos = 0;
        int value = 0;
        int count = 0;
        while ((pos = line.find(delimiter)) != std::string::npos) {
            string token = line.substr(0, pos);
            line.erase(0, pos + delimiter.length());
            value = std::atoi(token.c_str());
            count++;
        }
        input_vect.resize(vect_index++, vector<int>(count));
    }
    //sort vector of vectors
    for (int i = 0; i < input_vect.size(); i++) {
        sort(input_vect[i].begin(), input_vect[i].end(), std::less<int>());
        //print the sorted vectors and alos verify the content 
        for (auto v : input_vect[i]) cout << v << " ";
    }
    //write back into the file
    //Todo
}

Приведенный выше код не является полным, но я надеюсь, что вы получите то, что я хотел спросить.

Пожалуйста, предложите лучшее решение.

Также я хочу отсортировать эти строки, используя разные потоки, например:

Если содержимое файла:

13 38 13 100 4 234 85 34 0100 88

1 4 5 3 8 9 1 10

111 10 112 3 4 098 194

5 4 8 3 9 13 24 78 09 99

Я хочу создать четыре потока для сортировки каждой строки на месте.

1 Ответ

0 голосов
/ 29 сентября 2019

Чтобы найти хорошее решение, следуйте разумным методикам

  • включите в исходный код спецификацию, чего достичь
  • , если у вас возникли трудности стребуемый эффект в словах, воспринимайте это как намек на важность следующего пункта:
  • узнайте, как проверить, достигнут ли требуемый эффект
    [also] verify the content может быть частью этого
  • опишите как получить результат - если часть этого не является короткой или непростой, попытайтесь определить части, которые заслуживают имени, имеют небольшие зависимости с «остальными» и выделите другую процедуру или объект
  • для каждой процедуры (и, может быть, класса) укажите свою ответственность, используя любые средства, предлагаемые для используемой среды разработки - для C ++ это может быть doxygen
  • простоначать реализацию тестов (опять же, инструменты!) - это может быть быстрее, чем придумать «хороший» повод не делать этого, но
  • реализовать простейшую вещь, которая должна сбить с толкуibly do

Что касается многопоточности, решение кажется недостаточно конкретным:
Нужно ли выводить строки отсортированных целых чисел в каком-то конкретном месте или порядке?
Один способКоординаты «писатели» и «работники» представляют собой очередь задач - они позволяют рабочему потоку обрабатывать более одного фрагмента работы, а потоки могут оказаться полезными даже в том случае, если указанные фрагменты малы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...