我们能否在STL列表中容纳两种数据类型?

5
我希望我的列表可以保存整数值和字符串值。这是否可能?我正在使用STL列表实现哈希表,只能存储整数。我正在对字符串进行哈希处理,以获取我存储整数的索引。现在我也想将我的字符串与整数一起存储。
编辑1: 所以我正在使用这个语句:
    list<pair<int,string>> table[127];    

以下是我收到的错误信息:
>>' should be> >' 在嵌套模板参数列表中 好的,我已经解决了这个问题。看起来我没有在">>"中加入空格,现在已经修复了。

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


std::pair<int, std::string>? - kfsone
1
或者为什么不直接使用std::map或std::unordered_map呢? - kfsone
2
你对“以及”表达的意思不够清楚,这就是为什么你得到了两个不同的答案。如果你的意思是每个元素都包含一个字符串和一个整数,那么你需要使用pair。如果它将是一个字符串或一个整数,则需要使用struct-union组合。 - nickie
它可能不是最佳实践,但您可以将每个项存储为字符串,并在需要时进行转换。 - Zaiborg
抱歉..我的意思是我想在列表中存储一个字符串和一个整数。 我没有使用map或unordered map,因为我很新手,这是我第一次尝试,使用一个列表数组让我更加感受到程序中的事物是如何工作的。 我会尝试使用pairs,并告诉大家如果我遇到任何问题,非常感谢! :D - otaku
3个回答

8
你可以使用列表的方式来表示 std::pair,或者在 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

谢谢,这非常有帮助。我会进行更改,并让您知道是否遇到任何问题。 - otaku

2

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

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

1
你可以将字符串和整数存储在结构体中并存储结构体对象。
每个列表元素可以看起来像:
struct element  {
    string str;
    int val;
};

这是处理方式的 C 语言实现,请参考 @SingerOfTheFall 的答案。

std::string(或任何非POD类型)放入union中,除非您确切知道自己在做什么,否则这是一个不好的想法。 - user743382
为什么要使用 union?这并不能满足同时存储 intstring 的要求。你仍然可以使用 struct 来保存它们,只需摆脱 union 即可。 - Remy Lebeau
这不是@SingerOfTheFall答案的C版本。这是一个不相交的联合:只有其中之一会出现,你会知道哪一个。SingerOfTheFall建议使用乘积:两者都会出现。 - nickie
我误解了问题。我以为其中一个是必需的。对此感到抱歉。已更新答案,请提供反馈(?) - phoxis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接