如何简化std::map初始化 让vector<int>在初始化语句中仅出现一次
解决方案
方法1:单语句内实现(C++11及以上支持)
可以通过decltype关键字提取map的内置类型别名mapped_type来避免重复写vector<int>,整条初始化语句中vector<int>仅出现1次:
std::map<std::string, std::vector<int>> sviMap { {"Leo", decltype(sviMap)::mapped_type(50, 101)}, {"Brad", decltype(sviMap)::mapped_type(50, 201)} };
原理说明:decltype(sviMap)会自动推导得到当前map的完整类型,所有std::map实例都内置了mapped_type别名,对应键值对中值的类型,也就是你这里的vector<int>,直接用该别名构造值对象即可,不需要重复声明完整vector类型。
方法2:提前定义类型别名(可读性更高)
如果允许在初始化语句前提前定义公共类型别名,代码会更简洁易维护,vector<int>全局仅需要定义一次:
using IntVec = std::vector<int>; std::map<std::string, IntVec> sviMap { {"Leo", IntVec(50, 101)}, {"Brad", IntVec(50, 201)} };
后续如果需要修改值的容器类型,只需要修改using声明的那一行即可,不需要批量替换所有vector声明。
内容的提问来源于stack exchange,提问作者LeoA
相关产品推荐
相关产品推荐

