地图值类型的选择类型

decltype for map value type?

本文关键字:类型 选择 地图      更新时间:2023-10-16

这在 c++11 中合法吗:

std::unordered_map<X, Y> xy_map;
X my_x;
Y my_y;
xy_map.insert(decltype(xy_map)::value_type(my_x, my_y));

我在 gcc 4.6.3 中尝试过这个,但它不起作用。海湾合作委员会抱怨:

expected primary-expression before 'decltype'

我希望不要这样做:

typedef std::unordered_map<X, Y> MyMap;
xy_map.insert(MyMap::value_type(my_x, my_y));

我想 c++11 并不能解决这个问题或让它变得更容易。

代码C++正确。就像Basile在评论中提到的那样,这是一个针对GCC 4.7修复的错误。

这并不能回答您的问题,但它确实具有可能在编译器上工作的优点:

xy_map.emplace(my_x, my_y);

这将从给定的参数构造值类型。第一个参数构造键,其他参数用于值。这将有效地构建现有的std::pair。所以不需要像decltype之类的丑陋的东西。