【发布时间】:2014-04-14 18:51:08
【问题描述】:
我在使用键类型 uint64_t 和值类型 uint8_t 的 unordered_map 时遇到了一个奇怪的问题。 (我有几个可能很大的整数,我想用 uint8_t 值来计算。)这里有一些代码:
std::unordered_map<uint64_t,uint8_t> mymap;
mymap.emplace(2,1);
mymap.emplace(20,3);
mymap.emplace(200,34);
for (auto it = mymap.begin(); it != mymap.end(); ++it) {
std::cout << it->first << ":" << it->second << std::endl;
printf("%lld : %d\n", it->first, it->second);
}
看来键和值在unordered_map 中保存得很好。但是,std::cout << it->second << std::endl; 代码混淆了uint8_t 值的输出。也就是说,cout(for 循环中的第一行)会使输出出现乱码,而老式的 cstdio printf(for 循环中的第二行)可以很好地打印出这些值。诡异的。知道这里发生了什么吗?
如果我将unordered_map 更改为<uint64_t,uint16_t> 或<uint64_t,int>,它工作得非常好。我尝试了各种终端和伪终端环境以及文本文件,所有uint8_ts 的输出都出现乱码或缺失。我被难住了。
这是输出:
20:
20 : 3
200:"
200 : 34
2:
2 : 1
【问题讨论】:
-
要添加一两个乱码对吗?
-
提示:
uint8_t的 typedef 是什么?
标签: c++ stl unordered-map