【发布时间】:2020-03-11 18:27:56
【问题描述】:
考虑以下代码:
#include <iostream>
#include <typeinfo>
#include <map>
int main(int argc, const char* argv[]) {
typedef std::map<int,float> testmap;
typedef std::map<int,float> testmap2;
typedef std::map<typename testmap::value_type::first_type, typename testmap::value_type::second_type> rebuiltMap;
std::cout << "map samenes: " << std::is_same<testmap, rebuiltMap>::value << "\n";
std::cout << "map samenes: " << std::is_same<testmap, testmap2>::value << "\n";
std::cout << "original map type name " << typeid(testmap).name() << "\n";
std::cout << "same map type name " << typeid(testmap2).name() << "\n";
std::cout << "rebuilt map type name " << typeid(rebuiltMap).name() << "\n";
std::cout << "original map valuetype " << typeid(testmap::value_type).name() << "\n";
std::cout << "rebuilt map valuetype " << typeid(rebuiltMap::value_type).name() << "\n";
}
这会产生以下输出:
map samenes: 0 map samenes: 1 original map type name St3mapIifSt4lessIiESaISt4pairIKifEEE same map type name St3mapIifSt4lessIiESaISt4pairIKifEEE rebuilt map type name St3mapIKifSt4lessIS0_ESaISt4pairIS0_fEEE original map valuetype St4pairIKifE rebuilt map valuetype St4pairIKifE
为什么“重建”地图类型与简单地图类型不同,尽管两者具有相同的 value_type? 背景:我想测试包含对的容器是否是带有类似结构的地图
std::is_same<std::map<typename Container::value_type::first_type,
typename Container::value_type::second_type>,
Container>::value
【问题讨论】:
-
拆解的类型名称:
std::map<int, float, std::less<int>, std::allocator<std::pair<int const, float> > >和std::map<int const, float, std::less<int const>, std::allocator<std::pair<int const, float> > >