@Timak31
студент

Как задать структуру в vector?

Есть проблема. Мне нужно создать файл и заполнить его данними какие я ввел в структуру (это понятно, сделал). Потом мне нужно эти данные отсортировать по имени по алфавиту . И тут проблема, пробую отсортировать с помощью sort() , но для этого нужно передать структуру в вектор и это у меня не получаеться.
Это структура :
#pragma once
#include <iostream>

using namespace std;

struct database{
	char myName[124];
	char city[124];
	int age;
};

database recordIn(){
	database infa;
	cin.ignore();
	cout << "Name : ";
    cin >> infa.myName;
	cout << "City : ";
	cin >> infa.city;
	cout << "Age : ";
	cin >> infa.age;
	return infa;
}

Сама сортировка :
#pragma once
//#include <iostream>
#include <fstream>
#include <vector>
#include "nameFile.h"
#include "readFile.h"

using namespace std;

void sortFile(){
    database infa;
    vector<database> infa;
    sort(infa.begin(), infa.end(), [](const infa& a, const infa& b) {
        return a.myName < b.myName;
    });
}


А заполняем структуру здесь :
#pragma once
#include <fstream>
#include <iomanip>
#include "nameFile.h"
#include "structRecord.h"

using namespace std;

void writelnFile(){
	int n;
	cout << "n = ";
	cin >> n;
	nameFile();
	ofstream NAME(nameF, ios::binary | ios::app);
	for(int i=0; i<n; i++){
		database infa = recordIn();
		NAME.write((char *)&infa, sizeof(infa));
	}
	NAME.close();
}


Надеюсь на вашу помощь.
  • Вопрос задан
  • 669 просмотров
Решения вопроса 1
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Дело в том что в компараторе сравниваются не значения в строк, а указатели на нулевой символ. Надо делать так:
struct database{
  std::string myName; //char myName[124];
  std::string city; //char city[124];
  int age;
};

или так:
sort(infa.begin(), infa.end(), [](const infa& a, const infa& b) {
        return strcmp(a.myName, b.myName) < 0;
    });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы