【发布时间】:2019-03-15 07:09:17
【问题描述】:
新手问题,但我对此进行了搜索,但找不到明确解决我问题的方法 - 如果这很明显,请道歉。
我定义了一个如下所示的地图:
map<int, string> testmap = {
{ 0, "a" },
{ 1, "b" },
{ 2, "c" }
}
但是,我需要使用另一个函数提供的 uint64_t 值从 testmap 中检索一个值。
当我执行testmap[my_uint64_t_value] 时,它返回一个空字符串,所以我认为这是因为它将my_uint64_t_value 添加为key 并将value 设置为@987654327 @。
如果我将映射类型设置为<uint64_t, string>,这也是一样的,至少我当前定义键的方式是这样。
但是,有没有办法让我:
- 将
uint64_t值转换为常规int - 将地图定义为
<uint64_t, string>,并能够定义我的 键为“正确”类型?
看来int 类型转换并不常见,这是应该避免的吗?
【问题讨论】:
-
您应该提供完整的源代码示例。我们没有足够的信息来真正确定问题所在。我假设根本没有值为
my_uint64_t_value的键。 -
关于整数转换:打开编译器警告以警告危险转换。当然,从较大的类型转换为较小的类型时,您必须始终注意可能的溢出,以及在有符号和无符号整数值之间转换时的更多问题。
-
测试,但你必须知道它很危险,阅读有关 int 范围等的信息。 testmap[static_cast
(my_uin64_t_value)] -
在这个例子中,它是否像预期的那样工作? cpp.sh/7p3k5 注意 jamek 写的内容,为了测试它可能没问题,但是当你使用可能很快超过地图中 int 的严重数据执行此操作时,你最终会得到一些有趣的行为程序。
标签: c++ c++11 c++17 key-value stdmap