У меня сейчас такой код, но он для 2 значений предмет-цена (цена складывается) и нужно как-то в начале перед предметом добавить имя, чтобы было Имя-предмет-цена (цена также складывается. как я понял вид map будет
map<string, map>
#include
#include
#include
using namespace std;
int main()
{
string s;
int k;
map d;
while (cin >> s >> k)
{
if (d.count(s) == 1)
{
d[s] += k;
}
else
{
d[s] = k;
}
}
for (auto i = d.begin();i != d.end();i++)
{
cout << (*i).first << " " << (*i).second << endl;
}
return 0;
}
C/C++
Программирование C++. map std::
// для файла базы данных db.txt
#include <iostream>
#include <string>
#include <vector>
#include <tuple>
#include <fstream>
#include <sstream>
#include <map>
using namespace std;
class Record {
public:
using rec_t = tuple<string, string, size_t>;
Record()
: name_("-"), product_("-"), count_(0U) {}
Record(const string& name, const string& product, const size_t count)
: name_(name), product_(product), count_(count) {}
Record(const rec_t& rec)
: name_(get<0>(rec)), product_(get<1>(rec)), count_(get<2>(rec)) {}
void name(const string& value) { name_ = value; }
void product(const string& value) { product_ = value; }
void count(const size_t value) { count_ = value; }
rec_t record()const { return { name_, product_, count_ }; }
private:
string name_;
string product_;
size_t count_;
};
class Table {
public:
Table() = default;
bool load(const string& path) {
ifstream db(path);
if (db.is_open()) {
string line;
while (getline(db, line)) {
istringstream iss(line);
string name;
string product;
size_t count;
try {
iss >> name >> product >> count;
box_.emplace_back(Record{ name, product, count });
} catch (...) {
box_.clear();
db.close();
return false;
}
}
db.close();
} else return false;
return true;
}
void show()const {
map<string, map<string, size_t>> orders;
for (const auto& item : box_) {
auto [name, product, count] = item.record();
orders[name].insert({ product, count });
}
for (auto& [name, selection] : orders) {
cout << name << ':';
for (auto& [product, count] : selection) {
cout << "\n - " << product << ", " << count;
}
cout.put('\n');
}
cout.put('\n');
}
private:
vector<Record> box_;
};
int main() {
system("chcp 1251 > nul");
Table table;
if (table.load("db.txt")) table.show();
else puts("Ошибка: не удалось получить доступ к данным");
system("pause > nul");
}
#include <iostream>
#include <string>
#include <vector>
#include <tuple>
#include <fstream>
#include <sstream>
#include <map>
using namespace std;
class Record {
public:
using rec_t = tuple<string, string, size_t>;
Record()
: name_("-"), product_("-"), count_(0U) {}
Record(const string& name, const string& product, const size_t count)
: name_(name), product_(product), count_(count) {}
Record(const rec_t& rec)
: name_(get<0>(rec)), product_(get<1>(rec)), count_(get<2>(rec)) {}
void name(const string& value) { name_ = value; }
void product(const string& value) { product_ = value; }
void count(const size_t value) { count_ = value; }
rec_t record()const { return { name_, product_, count_ }; }
private:
string name_;
string product_;
size_t count_;
};
class Table {
public:
Table() = default;
bool load(const string& path) {
ifstream db(path);
if (db.is_open()) {
string line;
while (getline(db, line)) {
istringstream iss(line);
string name;
string product;
size_t count;
try {
iss >> name >> product >> count;
box_.emplace_back(Record{ name, product, count });
} catch (...) {
box_.clear();
db.close();
return false;
}
}
db.close();
} else return false;
return true;
}
void show()const {
map<string, map<string, size_t>> orders;
for (const auto& item : box_) {
auto [name, product, count] = item.record();
orders[name].insert({ product, count });
}
for (auto& [name, selection] : orders) {
cout << name << ':';
for (auto& [product, count] : selection) {
cout << "\n - " << product << ", " << count;
}
cout.put('\n');
}
cout.put('\n');
}
private:
vector<Record> box_;
};
int main() {
system("chcp 1251 > nul");
Table table;
if (table.load("db.txt")) table.show();
else puts("Ошибка: не удалось получить доступ к данным");
system("pause > nul");
}
я не понял задачу
в коде только два поля: ключ (какая-то строка) и значение (какое-то число)
никакого имени здесь я не вижу, и что с ним предполагается делать, я тоже не понимаю
по коду два замечания:
- if (d.count(s) == 1) ...else ...- не нужно, можно сразу ковырять d[s], т. к. при отсутствии оно автоматически инициализируется нулём
- (*i).first - зачем, если i->first ?
в коде только два поля: ключ (какая-то строка) и значение (какое-то число)
никакого имени здесь я не вижу, и что с ним предполагается делать, я тоже не понимаю
по коду два замечания:
- if (d.count(s) == 1) ...else ...- не нужно, можно сразу ковырять d[s], т. к. при отсутствии оно автоматически инициализируется нулём
- (*i).first - зачем, если i->first ?
map<pair< string, string >,int> выглядит куда более прилично
Николай Мякишев
#include < iostream >
#include < vector >
#include < set >
#include < stack >
#include < map >
#include < algorithm >
using namespace std;
typedef long long ll;
signed main() {
map< string,map< string,ll > > m;
ll n;
cin >> n;
while(n--){
string name,obj;
ll cost;
cin >> name >> obj >> cost;
m[name][obj] += cost;
}
for(auto &i: m){
cout << i.first << ": \n";
for(auto &j: m[i.first])
cout << j.first << ' ' << j.second << "\n";
}
}
#include < vector >
#include < set >
#include < stack >
#include < map >
#include < algorithm >
using namespace std;
typedef long long ll;
signed main() {
map< string,map< string,ll > > m;
ll n;
cin >> n;
while(n--){
string name,obj;
ll cost;
cin >> name >> obj >> cost;
m[name][obj] += cost;
}
for(auto &i: m){
cout << i.first << ": \n";
for(auto &j: m[i.first])
cout << j.first << ' ' << j.second << "\n";
}
}
Похожие вопросы
- Что такое #include <iostream>, std using namespace std В языке программирования C++?
- Задача по программированию C++
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Контрольная по алгоритмизации и программированию! C++
- Язык программирования c++
- Нормальный ли язык программирования C для новичка ,что бы в дальнейшем перейти на C# ,C++,И в чем различие между ними?
- Основы программирования C++
- Программирование c++ программирование и работа со структурами
- Задание по программированию c++, буду благодарен помощи
- Задача Программирование C++ Нужна программа на С++
ВВОД
Ivanov paper 10
Petrov pens 5
Ivanov marker 3
Ivanov paper 7
Petrov envelope 20
Ivanov envelope 5
Вывод
Ivanov:
envelope 5
marker 3
paper 17
Petrov:
envelope 20
pens 5