【问题标题】:Can we hold 2 data types in a STL list?我们可以在 STL 列表中保存 2 种数据类型吗?
【发布时间】:2013-09-17 17:52:48
【问题描述】:

我希望我的列表包含一个整数值和一个字符串值。这可能吗?
我正在使用只能存储整数的 STL 列表实现哈希表。我正在散列一个字符串以获取我存储整数的索引。现在我希望我的字符串也与整数一起存储。

编辑 1:
所以我使用这个语句:

    list<pair<int,string>> table[127];    

这是我得到的错误:
&gt;&gt;' should be> >' 在嵌套模板参数列表中 好的,我修复了这个..似乎我没有在“>>”中添加空格,所以现在修复了

下一个问题
如何将我的对添加到表数组中?

【问题讨论】:

  • std::pair ?
  • 或者为什么不直接使用 std::map 或 std::unordered_map?
  • 您不清楚“以及”是什么意思,这就是为什么您会得到两个不同的答案。如果您的意思是每个元素将包含一个字符串一个整数,那么您需要一个pair。如果它是一个字符串一个整数,那么你需要一个struct-union组合。
  • 这可能不是最佳做法,但您可以将每个项目存储为字符串并在需要时进行转换。
  • 对不起.. 我的意思是我想在我的列表中存储一个字符串和一个整数。我没有使用地图或无序地图,因为我对此很陌生,这是我的第一次尝试,使用列表数组让我对我的程序中的工作内容和方式有了更多的感觉,这就是为什么。我会尝试使用配对,如果我遇到任何问题,请告诉大家,非常感谢! :D

标签: c++ list stl


【解决方案1】:

您可以拥有std::pairs 的列表,或者使用 c++11,std::tuple,例如:

std::list < std::pair< int, std::string > >list;
std::list < std::tuple< int, std::string > >list;

要访问一对中的元素,请使用pair.firstpair.second。要访问元组中的元素,请使用std::get

auto t = std::make_tuple(1,"something");
std::get<0>(t);//will get the first element of the tuple

【讨论】:

  • 谢谢,这对我很有帮助。我会做更改,如果我遇到任何问题,请告诉您
【解决方案2】:

您可以使用std::pairstd::tuple

std::list<std::pair<int, string>> list;

【讨论】:

    【解决方案3】:

    您可以将字符串和整数存储在一个结构中,并存储该结构的对象。

    每个列表元素可能如下所示:

    struct element  {
        string str;
        int val;
    };
    

    这是C的处理方式,也请@SingerOfTheFall的回答。

    【讨论】:

    • std::string(或任何非 POD 类型)放入 union 是一个坏主意,除非您确切知道自己在做什么。
    • 为什么是union?这不满足将intstring 存储在一起的要求。你仍然可以使用struct 来持有它们,只需摆脱union
    • 这不是@SingerOfTheFall 答案的C 版本。这是一个不相交的联合:两者中只有一个会出现,您会知道是哪一个。 SingerOfTheFall 建议一个产品:两者都会出现。
    • 我误解了这个问题。我认为其中之一是必需的。对此感到抱歉。更新了答案,请提供反馈(?)
    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多