【问题标题】:How to create an std::map and save it by using the console?如何使用控制台创建一个 std::map 并保存它?
【发布时间】:2025-12-15 15:30:01
【问题描述】:

我希望能够通过使用控制台并获取用户输入来创建这些值来创建和存储值。所以我希望能够在控制台中输入类似

1234

123

1

它会用一个元组将它保存到我的地图中

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

info[1234] = { 123, 1 };

我对此完全陌生,并且已经查找了几个小时的东西,但我不明白如何使用 &lt;&lt; &gt;&gt; 在我看来要使用这些的任何地方。我希望能够关闭程序并打开它,并且值仍然会被存储。

任何和所有信息将不胜感激。谢谢。

【问题讨论】:

  • 您应该遵循介绍性书籍 (*.com/questions/388242/…) 或其他一些文本/课程。通过查找随机的东西并将它们粘合在一起,您将无法正确学习该语言。
  • 查找 operator overloading 并阅读它。
  • 谢谢你们提供的信息,我不知道这里有学习 C++ 的指南。

标签: c++ dictionary tuples stdmap


【解决方案1】:

我整理了一些示例代码来近似您的任务。它从标准输入中读取一些整数,并将其返回到标准输出。出于您的目的,您可能希望以不同的方式格式化输出,并在某个时候从文件中读取/保存它。可能有更简洁、更健壮、更高效和更漂亮的方法来实现它,但我很快将它们放在一起让你开始。如果您发现对您来说很奇怪的事情,我很乐意回答一些问题,但是这个网站的想法是您证明您首先付出了一些努力来找出答案(例如通过访问其他问题,阅读一些书籍,或咨询 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);
}

【讨论】:

  • 非常感谢示例我一定会看的。
  • 没问题。如果您发现这可以满足您的原始问题,请将您的问题标记为“已回答”(单击复选标记),我们将不胜感激。
最近更新 更多