Итак, у меня есть этот проект, над которым я сейчас работаю. Программа считывает файл, который может иметь любое количество линий к нему, и каждый элемент в файле другого типа, например, так:Сортировка структуры данных, которая указывает на массив C++
1002 Hammer 23.65 203
1024 Nails 6.95 400
1276 Screwdriver 13.95 251
1385 Elec_Drill 45.69 132
1462 Air_Filter 7.95 500
первый номер является номером продукта, который представляет собой тип двойной , вторая - строка типа, затем плавающая цена каждого и последующего числа проданных чисел. Программа читает их, затем сортирует их и выводит самые продаваемые и самые продаваемые товары.
Я работал над этим в течение недели, и это то, что у меня есть
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <map>
#include <algorithm>
using namespace std;
struct Sales
{
string prodName;
double proNum;
string price;
string sold;
};
void sortArray(struct database, int); //Function prototypes
void sortString(string[], int);
void showArray(struct database[], int);
bool sales_sorter(Sales const& lhs, Sales const& rhs);
int main()
{
ifstream fin;
fin.open("sales.txt");
if (fin.fail())
{
cout << "Failed to open file" << endl;
}
vector<Sales> database(5);
string line;
int i = 0;
while (!fin.eof())
{
for (int j = 0; j < 5; j++)
{
if (j == 0) // name
{
fin >> database[i].proNum;
}
else if (j == 1) //
{
fin >> database[i].prodName;
}
else if (j == 2)
{
fin >> database[i].price;
}
else if (j == 3)
{
fin >> database[i].sold;
}
}
i++; //move to next item
}
}
std::sort(sales.begin(), sales.end(), &sales_sorter);
cout << &sales_sorter;
/* for (int x = 0; x < 5; x++) //Just used to make sure the array is working
{
cout << database[x].proNum << endl;
}
for (int x = 0; x < 5; x++)
{
cout << database[x].prodName << endl;
}
for (int x = 0; x < 5; x++)
{
cout << database[x].price << endl;
}
for (int x = 0; x < 5; x++)
{
cout << database[x].sold << endl;
} */
system("pause");
return 0;
}
void sortArray(double database[], int)
{
bool swap;
int temp;
do
{
swap = false;
for (int count = 0; count < (5 - 1); count++)
{
if (database[count] > database[count + 1])
{
temp = database[count];
database[count] = database[count + 1];
database[count + 1] = temp;
swap = true;
}
}
} while (swap);
}
void showArray(double database[], int)
{
for (int count = 0; count < 5; count++)
cout << database[count] << " ";
cout << endl;
}
bool sales_sorter(Sales const& lhs, Sales const& rhs)
{
if (lhs.prodName != rhs.prodName)
return lhs.prodName < rhs.prodName;
if (lhs.proNum != rhs.proNum)
return lhs.proNum < rhs.proNum;
if (lhs.price != rhs.price)
return lhs.price < rhs.price;
return lhs.sold < rhs.sold;
}
Теперь я получил сортировочную идею из этого thread но моя сортировка BOOL бросает эту ошибку: «Ошибка ожидала»; «но нет места, где можно положить это без каких-либо проблем, может кто-то, пожалуйста, помогите мне разобраться, как сортировать это. Я прошел через много разных потоков, но все эти предметы нужно сортировать, и я не могу найти что-нибудь о структурах данных, которые указывают на массив!
Вы пытаетесь определить функцию 'sales_sorter' внутри' main'. Вы не можете этого сделать. – molbdnilo
@molbdnilo Спасибо за это! Я не знал об этом – Destry