【问题标题】:Use a map with the map name defined by a string C++使用由字符串 C++ 定义的地图名称的地图
【发布时间】:2020-02-06 20:11:07
【问题描述】:

这是Cout from a map with std::tuple的后续问题

我制作了一张小地图,我称之为BMW。它包含键UsageDiesel,如下所示。

#include <iostream>
#include <bits/stdc++.h>
#include <map>
#include <vector>
using namespace std;

int main()
{

    // initialize container
    map<string, tuple<string, string>> BMW;

    // insert elements
    BMW.insert({"Usage", {"1", "2"}});
    BMW.insert({"Disel", {"2", "3"}});

        string sFirst_value;
     string sSecond_value;

     //prints out the map
    for (const auto& x : BMW) {
        sFirst_value.assign(get<0>(BMW.find(x.first)->second)); 
        sSecond_value.assign(get<1>(BMW.find(x.first)->second));
        cout << x.first << "\n" << "Min: " << sFirst_value <<  "\n" << "Max: " << sSecond_value << "\n" << "\n";
    }

    return 0;
}

有没有我可以从字符串中调用地图名称BMW 而不是写BMW.insert({"Usage", {"1", "2"}});?像这样:

stirng Mycar;
Mycar.insert({"Usage", {"1", "2"}});

【问题讨论】:

标签: c++ dictionary


【解决方案1】:

用一个小例子来扩展昆汀的评论:

std::map<std::string, std::map<std::string, std::tuple<std::string, std::string>>> mapMap;
std::string myCar = "BMW";
std::map<std::string, std::tuple<std::string, std::string>> &myCarMap = mapMap[myCar];
myCarMap.insert({"Usage", {"1", "2"}});

//Or simply
auto &bmwMap = mapMap["BMW"];
bmwMap.insert({"Usage", {"1", "2"}});
}

也许你能找到比mapMap更好的名字;)

【讨论】:

  • 谢谢!您能否在第 3 行提供一些 cmets,我无法遵循那个。我不明白&amp;myCar 是做什么的?
  • 这意味着,变量myCarMap 只是一个引用(几乎就像一个指针)。如果没有&amp;,我们将复制mapMap[myCar]; 的结果。您可以在this question 中阅读有关此主题的更多信息
  • 最后一个问题。如果我想在第一张地图中找到汽车名称,比如宝马,我该怎么做?这似乎不起作用:Test3.assign(get&lt;0&gt;(mapMap.find("BMW")-&gt;second));
  • mapMap.find("BMW")-&gt;second 本身是一个映射,而不是一个元组。
猜你喜欢
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2021-06-19
  • 2016-04-28
  • 2023-03-15
  • 2021-01-20
  • 1970-01-01
相关资源
最近更新 更多