Как создать std :: map и сохранить его с помощью консоли? - PullRequest
0 голосов
/ 17 ноября 2018

Я хочу иметь возможность создавать и хранить значения с помощью консоли и получения пользовательского ввода для создания этих значений.Поэтому я хотел бы иметь возможность набирать в консоли что-то вроде

1234

123

1

, и это сохранит его на моей карте с помощью кортежа, такого как

std::map<int, std::tuple<int, int>> info; 

info[1234] = { 123, 1 };

Я совершенно новичок вэто и искал вещи в течение пары часов, но я не понимаю, как использовать << >> везде, где я смотрю, говорит, чтобы использовать их.Я хотел бы иметь возможность закрыть программу и открыть ее, и значения все равно будут сохранены.

Любая и вся информация будет оценена.Спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

Я собрал пример кода, чтобы приблизиться к вашей задаче. Он читает некоторые целые числа из стандартного ввода и возвращает его в стандартный вывод. В ваших целях вы можете по-разному форматировать вывод и в какой-то момент прочитать / сохранить его из / в файл. Вероятно, есть более краткие, более надежные, более эффективные и более привлекательные способы сделать это, но я собрал все это вместе, чтобы вы начали. Если вы найдете что-то странное для вас, я был бы рад ответить на некоторые вопросы, но идея этого сайта заключается в том, что вы доказываете, что сначала вы приложили некоторые усилия, чтобы найти ответы (например, посетив другие вопросы, прочитав некоторые из них). книги или справочник по C ++ по адресу: https://en.cppreference.com/w/cpp)

#include <iostream>
#include <map>
#include <stdexcept>

using namespace std;
using MyMap = map<int, pair<int, int>>;

MyMap::value_type read_entry() {
  int key, v_1, v_2;
  bool started_read{false};
  if ((cin >> key) && (started_read = true) && (cin >> v_1) && (cin >> v_2)) {
    return {key, {v_1, v_2}};
  } else if (started_read) {
    throw invalid_argument("improper input");
  } else {
    return {};
  }
}

MyMap read_map() {
  MyMap myMap;
  while (true) {
    auto entry = read_entry();
    if (cin) {
      myMap.insert(move(entry));
    } else if (cin.eof()) {
      return myMap;
    } else {
      throw invalid_argument("io error");
    }
  }
}

void dump_map(const MyMap &myMap) {
  for (auto &&value : myMap) {
    cout << value.first << "\n"
         << value.second.first << "\n"
         << value.second.second << endl;
  }
}

int main() {
  cout << "reading map..." << endl;
  MyMap myMap;
  try {
    myMap = read_map();
  } catch (invalid_argument e) {
    cout << "error encountered reading map: " << e.what() << endl;
    return 1;
  }

  cout << "dumping map..." << endl;
  dump_map(myMap);
}
...